Debian 双网卡如何只保留一个默认路由呢?

2016-09-20 11:09:14 +08:00
 nifury

我正在使用 debian 8 ,有 eth0 和 wlan0 , eth0 连接内网, wlan0 连接外网,/e/n/interfaces 如下:

allow-hotplug eth0
iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

默认的路由表如下:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.17.128.2    0.0.0.0         UG    202    0        0 eth0
0.0.0.0         192.168.1.1     0.0.0.0         UG    303    0        0 wlan0
172.17.128.0    0.0.0.0         255.255.128.0   U     202    0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     303    0        0 wlan0

现在的问题是我无法通过 WIFI 来 SSH 到我的主机,因为系统默认回复到 eth0 导致 TCP 连接无法建立

以下是我尝试过的方法:

unset new_routers

post-up route del default dev eth0

把 wlan0 设置 metric 0

都没用

而且我手动删掉 eth0 的默认路由之后,过一会儿自己又回来了……

有没有什么办法可以在系统启动的时候只保留 wlan0 的默认路由呢?

9217 次点击
所在节点    Linux
32 条回复
cmlz
2016-09-20 13:30:00 +08:00
@nifury
难道你的 eth0 每次获取到的网关都不一样?
nifury
2016-09-20 13:35:28 +08:00
@cmlz 在同一个校区是一样的,但另一个校区的网关不一样
nifury
2016-09-20 13:38:28 +08:00
@pagxir 谢谢。本机的反向路由过滤是关闭的
其实我只是想删掉 eth0 的默认路由而已,只是不知道怎么做
cmlz
2016-09-20 13:55:56 +08:00
@nifury
/etc/network/interfaces 后面只添加下面一行试试:

down route del -net 0.0.0.0 dev eth0
cmlz
2016-09-20 14:04:05 +08:00
把你的 /etc/network/interfaces 配置这样改:
auto lo
iface lo inet loopback

allow-hotplug eth0
iface eth0 inet dhcp
down route del -net 0.0.0.0 dev eth0
#eth0 激活后删除默认路由

allow-hotplug wlan0
iface wlan0 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
nifury
2016-09-20 17:02:53 +08:00
@cmlz 谢谢,这个我试过,并没有用
另外为何是 down ,不应该是 up 么?
我试过 post-up 打印路由表,发现是空的,所以删除是无效的
猜测启动的时候 DHCP 还没回应,所以并没有删除
cmlz
2016-09-20 17:40:08 +08:00
@nifury
是 up 才对,如果你试过无效的话,看来只能延时等 DHCP 起效再操作了。
JamesRuan
2016-09-20 18:23:36 +08:00
“因为系统默认回复到 eth0 导致 TCP 连接无法建立”怎么可能吗?

是因为 sshd 开在 wlan up 之前吗?
如果不是的话,无论如何,如果按 0.0.0.0:22 进行 listern 的话,自然可以连接上啊?
catror
2016-09-20 18:23:45 +08:00
把内网的网关删除,手动加一条内网的路由,只路由内网地址
allen2000
2016-09-20 18:27:50 +08:00
D.2.7. Altering existing routes with ip route change

Occasionally, you'll want to remove a route and replace it with another one. Fortunately, this can be done atomically with ip route change.

Let's change the default route on tristan with this command.

Example D.24. Altering existing routes with ip route change

[root@tristan]# ip route change default via 192.168.99.113 dev eth0
[root@tristan]# ip route show
192.168.99.0/24 dev eth0 scope link
127.0.0.0/8 dev lo scope link
default via 192.168.99.113 dev eth0

from: http://linux-ip.net/html/tools-ip-route.html
catror
2016-09-20 18:32:38 +08:00
噢,是 DHCP 的啊…我有一台设备也是同时接内外网,不过地址都是静态的,内网不配置网关,然后加一条指向内网的网关的路由给内网地址使用就行
allen2000
2016-09-20 18:32:50 +08:00
可能还需要运行一下, ip route flush cache
If you do use the ip route change command, you should be aware that it does not communicate a routing table state change to the routing cache, so here is another good place to get in the habit of using ip route flush cache.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/307455

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX