2014-03-30 22 views
0

我正在爲我的嵌入式Debian Linux系統編寫一個程序。它有一個單元調制解調器,它被調用爲ppp0,並且還有eth0,可以插入也可以不插入。我想讓系統工作的是它使用ppp0作爲默認路由,除非它可以建立到在eth0的外部世界,在這種情況下eth0應該成爲默認路由。 eth0電纜可能隨時拔掉。爲此,我編寫了一個C++程序,它使用curl嘗試通過eth0建立與公共Web服務器的連接。如果成功,它會嘗試去製作默認路由eth0。我借用了Linux pppd項目中的一些代碼來操縱路由信息。系統在ppp0激活時啓動。然後運行我的程序,它檢測到它可以通過eth0建立連接(當電纜插入時),然後它將默認路由更改爲eth0。之後,網絡以某種方式停止工作,我不能再ping和公共服務器。不知何故,我改變路線已經殺死了網絡。在我跑我的程序中,「路線」的輸出爲:Linux:我編程改變我的默認路由到eth0,但現在我不能ping,有什麼建議嗎?

 
Kernel IP routing table 
Destination  Gateway   Genmask   Flags Metric Ref Use Iface 
80.sub-66-174-2 *    255.255.255.255 UH 0  0  0 ppp0 
192.168.98.0 *    255.255.255.0 U  0  0  0 eth0 
loopback  *    255.0.0.0  U  0  0  0 lo 
default   *    0.0.0.0   U  0  0  0 ppp0 

我跑我的程序後,「路線」的輸出爲:

 
Kernel IP routing table 
Destination  Gateway   Genmask   Flags Metric Ref Use Iface 
66.174.217.80 *    255.255.255.255 UH 0  0  0 ppp0 
192.168.98.0 *    255.255.255.0 U  0  0  0 eth0 
loopback  *    255.0.0.0  U  0  0  0 lo 
default   *    0.0.0.0   U  0  0  0 eth0 

所以我看不到任何明顯有什麼問題的跡象。代碼發佈在http://pastebin.com/AwKdvSf1

感謝您的任何幫助或見解如何解決此問題。

回答

1

您的默認網關IP地址未定義。

route add default gw <gateway ip>爲根(或sudo)

注意:在使用DHCP分配IP設置,將我想解決你的問題,否則你就必須靜態定義的默認路由最佳途徑。

+0

網關和默認路由有什麼區別?在前後兩種情況下,route命令都顯示一個默認條目,那麼爲什麼在第二種情況下它不會用作默認路由? –

+0

網關抱歉,我的意思是「默認網關」。在「默認」raw中,您應該在「網關」列下看到默認網關的IP地址。但它應該與ppp相同,但它與ppp一起工作的原因很可能是因爲通過ppp鏈路的網關IP是本地ppp設備本身。看看這裏: http://www.tldp.org/HOWTO/PPP-HOWTO/manual.html – UnX

2

您必須在您的ppp0配置中添加DEFROUTE=no

相關問題