我正在为我的嵌入式Debian Linux系统编写程序。它有一个单元调制解调器,它被提升为ppp0,也有一个可能插入或不插入的eth0。我希望系统工作的原因是它使用ppp0作为默认路由,除非它可以与ppp0建立连接。在eth0之外的世界,在这种情况下,eth0应该成为默认路由。 eth0电缆可以随时拔掉。为此,我编写了一个C ++程序,该程序使用curl尝试通过eth0建立与公共Web服务器的连接。如果成功,则尝试继续使用默认路由eth0。我从Linux pppd项目中借用了一些代码来操纵路由信息。系统启动时ppp0处于活动状态。然后我运行我的程序,它检测到它可以通过eth0建立连接(当电缆插入时),然后它将默认路由更改为eth0。在那个网络以某种方式停止工作之后,我再也无法ping和公共服务器了。不知怎的,我改变路线已经杀死了网络。在我运行程序之前,输出" route"是:
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
运行我的程序后,输出" route"是:
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
感谢您提供有关如何解决此问题的任何帮助或见解。
答案 0 :(得分:1)
您的默认网关IP地址未定义。
以root(或sudo)
键入route add default gw <gateway ip>
注意:使用dhcp分配ip设置是我认为解决问题的最佳方式,否则你必须静态定义默认路由。
答案 1 :(得分:0)
您必须在DEFROUTE=no
配置中添加ppp0
。