Linux:我以编程方式将我的默认路由更改为eth0,但现在我不能ping任何建议吗?

时间:2014-03-30 19:10:20

标签: linux networking routing ethernet modem

我正在为我的嵌入式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

感谢您提供有关如何解决此问题的任何帮助或见解。

2 个答案:

答案 0 :(得分:1)

您的默认网关IP地址未定义。

以root(或sudo)

键入route add default gw <gateway ip>

注意:使用dhcp分配ip设置是我认为解决问题的最佳方式,否则你必须静态定义默认路由。

答案 1 :(得分:0)

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