如果主机路由IP数据包,如果它有两个IP地址?

澄清我的问题…

我想知道Linux内核在主机主机上如何路由数据包?

对于'多家',我的意思是主机有多个网卡来发送数据包,例如我的Debian在Virtualbox有两个网卡。

eth0提供NAT支持。 我不知道Virtualbox如何设法做到这一点。 我的意思是没有任何虚拟网卡在我的Windows主机的IP是10.0.2.x.

eth1仅提供主机支持。 我使用这个小型networking来学习TCP / IP协议,并做一些小的实验。 我手动将其configuration为IP地址192.168.56.2,网关192.168.56.1,后者的IP地址是Virtualbox虚拟网卡的IP地址。

主机操作系统我用ADSL连接互联网,得到一个随机的IP地址,例如118.249.xxx.113。

所以问题出来了,linux内核怎么路由IP包呢? 我的意思是如果我已经运行了以下命令,我无法连接到Internet。

ifup eth0
ifup eth1
ping www.google.com

该ping将不会返回响应。

那么在设置eth1之后,内核会使用eth1作为默认网卡,在主机专用networking中发送IP数据包? 因此,在Debian中,我无法连接到外部的互联网?

另一个简单的问题是,eth1现在是默认的NIC,如果eth0找不到可用的路由条目,Linux内核是否会尝试使用eth1 NIC发送数据包?
如果会,那么如何configuration呢?

这是我在Virtualbox中的Debian Linux的networkingconfiguration。

eth0 Link encap:Ethernet HWaddr 08:00:27:ec:d9:bb inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:feec:d9bb/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1690 errors:2 dropped:0 overruns:0 frame:0 TX packets:1129 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:2276172 (2.1 MiB) TX bytes:62647 (61.1 KiB) Interrupt:11 Base address:0xd020 eth1 Link encap:Ethernet HWaddr 08:00:27:ae:e1:69 inet addr:192.168.56.2 Bcast:192.168.56.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:feae:e169/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:48 errors:0 dropped:0 overruns:0 frame:0 TX packets:17 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:5985 (5.8 KiB) TX bytes:1334 (1.3 KiB) Interrupt:10 Base address:0xd240 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:8 errors:0 dropped:0 overruns:0 frame:0 TX packets:8 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:560 (560.0 B) TX bytes:560 (560.0 B) 

路由表如下:

 Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 192.168.56.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 0.0.0.0 192.168.56.1 0.0.0.0 UG 0 0 0 eth1 0.0.0.0 10.0.2.2 0.0.0.0 UG 0 0 0 eth0 

谢谢。
jcyang。

我不确定我是否正确理解了这个问题,但是执行echo 1> / proc / sys / net / ipv4 / ip_forward来启用路由。 通过编辑/etc/sysctl.conf使其成为永久的。 当它被设置为1(启用)时,Linux将把从一个以太网接口接收到的数据包转发到另一个 – 它将充当路由器。
如果你有一个双机家庭networking – 有两种方法可以上网 – 你不能只用两个默认网关来安装上行链路…你可以做的是select主要的默认网关,比如说192.168.56.1然后select一些你想要通过辅助链接的networking:
ip route add default via 192.168.56.1
ip route add 221.xxx/24 via 10.10.10.2
ip route add 99.99.99.99/32 via 10.10.10.2

你的问题有点混乱,但让我试试看。

首先,如果你想有一个简单的NAT /伪装路由器,有一些简单的,适应性的教程,如何使用netfilter( iptables )来做到这一点。 启用此行为可能看起来很简单。 谷歌search“Linux NAT”或“Linux伪装”将有所帮助。

编辑 :扔在基本的命令在一个很好的措施。 一定要知道哪个接口是哪个!

 /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE /sbin/iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT /sbin/iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT 

否则,只要能够使用route命令删除“额外”网关,并通过eth1强制所有stream量(如果这是您的目标)(如果我理解您的话,在这种情况下根本不需要eth0)。

 route del gw 10.0.2.2 eth0 

应该做最后一个场景的把戏。 (如果我正确地理解你,我可能不会)

希望有所帮助。

你有两个默认路由。 我一次只使用一个,但我想两个不会是一个问题—据我所知,路由表是按特定性(目的子网掩码中的位数,升序)和也许MTU(虽然我不这么认为在Linux上)。 然后将使用sorting列表中的第一个匹配的默认路由。

尝试删除其中一个默认路由(路由删除…如其他人已经提到,或IP路由删除…)。

否则…为什么你的ping得到“没有回应”? 这听起来像是一个防火墙问题。 这很可能是linux自动地用两条默认路由做一个负载平衡/循环的事情,但我从来没有听说过Linux这样做,它可能会产生一些协议的问题,所以我怀疑它。

如果你有路由问题,ping应该说“没有路由到主机”或类似的东西。 没有反应是不同的。 确保ping从主机名确定IP。 如果没有,这是一个DNS问题。 如果是的话,看看你的防火墙 – iptables -L -n -v会给你任何规则,以及规则被击中了多less次。 如果一个规则的增加和你的ping一样多,那很可能是问题所在。 否则,用wireshark检查离开和进入机器的包。

所以,让我解释一下你的例子中的一些基础知识。 你有2个Nics(虚拟或不是很重要)。 两者都在单独的networking。 10.0.2.0和192.168.56.0

路由表中的前两项显示它们没有特殊的网关(0.0.0.0)。最后一列显示了它们连接的NIC。

然后在路由表中有一个错误。 您有两个条目用于默认网关。 你只能有一个真正的默认网关。 正常情况下,IP数据包将被发送到路由表中的第一个默认gw。 (我想你的情况是错误的)

我不知道如何NAT的工作原理(我曾经使用桥接networking)。 所以你有两个select。 将默认网关设置为您的REAL Machines IP地址的IP地址。 例如,如果您的虚拟机外的机器具有IP 10.0.2.254,则将默认网关设置为10.0.2.254。 (在NAT环境中,您必须在您的虚拟Box之外设置您的机器以支持此function,必须正确设置ipfilter,并且必须在接口之间路由数据包echo 1 > /proc/sys/net/ipv4/ip_forward )。

如果您使用桥接设置,则您的机器可以直接连接到连接到互联网的路由器。 比你只需要设置一个IP地址是这个networking,并设置您的默认网关路由器的IP。 例如VBOX 10.0.2.2 ——- MACHINE OUTSIDE VBOX 10.0.2.254 ——路由器连接到互联网10.0.2.1

比你的网关将是10.0.2.1