Uri*_*i H 16 sockets network-programming network-interface
我有一台带有两个网络接口的PC:eth0和eth1.
eth0 - ip为192.168.11.X/24.
eth1 - ip为192.168.130.X/24.eth1具有互联网连接.
当我尝试连接到互联网时,我的操作系统如何知道使用哪个界面?它是否遍历所有默认网关?它是否具有每个接口提供的缓存?Windows和Linux之间的行为有什么不同吗?
Joe*_*nux 16
我将回答Linux方面的问题(至少对于基于Debian的系统,例如Ubuntu,因为此时用户更常见):
在命令行中键入以下内容:
route -n
Run Code Online (Sandbox Code Playgroud)
您应该看到您的"路由表",如下所示:
Destination Gateway Genmask ... Iface
0.0.0.0 192.168.11.254 0.0.0.0 ... eth0
169.254.0.0 0.0.0.0 255.255.0.0 ... eth0
192.168.11.0 0.0.0.0 255.255.255.0 ... eth0
192.168.130.0 0.0.0.0 255.255.255.0 ... eth1
Run Code Online (Sandbox Code Playgroud)
我省略了几列,但基本上,"目标"下的"0.0.0.0"行是确定默认路由的位置的行.换句话说,所有流量都不会流向其他行中的任何其他子网(google.com,facebook.com,等等).
如果它不正确(例如在上表中,"eth1"是您想要访问Internet的卡),则应更改默认路由:
sudo route del default
sudo route add default gw 192.168.130.254 netmask 255.255.255.0
Run Code Online (Sandbox Code Playgroud)
这将解决它现在.要使其永久化,请编辑interfaces文件:
sudo gedit /etc/network/interfaces
Run Code Online (Sandbox Code Playgroud)
编辑它看起来像以下内容(根据您的具体情况进行必要的更改):
auto eth0
iface eth0 inet dhcp
up route del default
auto eth1
iface eth1 inet dhcp
up route add default gw 192.168.130.254 netmask 255.255.255.0
Run Code Online (Sandbox Code Playgroud)
然后重新启动网络,看看是否有诀窍:
sudo /etc/init.d/networking restart
Run Code Online (Sandbox Code Playgroud)