我有两张网卡,配置如下:
eth0 Link encap:Ethernet HWaddr 00:19:d1:31:08:e8
inet addr:192.168.5.104 Bcast:192.168.5.255 Mask:255.255.255.0
inet6 addr: fe80::219:d1ff:fe31:8e8/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4564126 errors:590 dropped:0 overruns:0 frame:329
TX packets:9707383 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1151788275 (1.0 GiB) TX bytes:189318786 (180.5 MiB)
Interrupt:20 Memory:e0300000-e0320000
eth1 Link encap:Ethernet HWaddr 00:e0:4c:51:0d:55
inet addr:85.255.103.4 Bcast:85.255.103.255 Mask:255.255.255.0
inet6 addr: fe80::2e0:4cff:fe51:d55/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:5466 errors:0 dropped:0 overruns:0 frame:0
TX packets:499 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:518961 (506.7 KiB) TX bytes:34236 (33.4 KiB)
Interrupt:22 Base address:0x1000
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:136 errors:0 dropped:0 overruns:0 frame:0
TX packets:136 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:15556 (15.1 KiB) TX bytes:15556 (15.1 KiB)
IP路由:
$ ip route
192.168.5.0/24 dev eth0 proto kernel scope link src 192.168.5.104
85.255.103.0/24 dev eth1 proto kernel scope link src 85.255.103.4
default via 192.168.5.1 dev eth0
default via 85.255.103.1 dev eth1
当我 ping eth1 的 IP 地址时,没有得到任何响应。
使用 tcpdump 我发现发送到 eth1 的所有 ICMP 回显请求都通过 eth0 接口应答。
如何才能使两个接口正常工作?如果我 ping eth1,它也应该在 eth1 上返回答案。
eth0 具有更快的互联网连接,我只是想保留 eth1,并在应用程序绑定到该特定 IP 时通过它。
答案1
删除为 eth0 (192.168.5.1) 定义的网关。如果您需要多个默认路由,则必须使用iproute2并为其制定政策。
答案2
看来您必须删除第二个默认网关:
route del default 192.168.5.1
此后,85.255.103.4 IP 可以正常工作,但 192.168.5.0/24 子网会出问题。要解决此问题,您需要通过 192.168.5.1 路由所有源 IP 为 192.168.5.10 的数据包。为此,请使用策略路由:
echo '300 eth0tbl' >> /etc/iproute2/rt_tables
ip route add default via 192.168.5.1 table eth0tbl
ip rule add from 192.168.5.10 table eth0tbl
答案3
在这种情况下,最好说清楚。
有很多原因导致您无法 ping 或 ssh 到 eth1 上的 IP,但首先您应该配置基于策略的路由,强制流量使用与 RX 相同的接口进行 TX。
您希望流量使用 eth0 来实现更快的连接,因此我们将其保留为默认路由。
接下来我们将定义表,创建规则,然后创建路线。
在 /etc/iproute2/rt_tables 中定义两个表,如下所示:
100 eth0if 101 eth1if
创建两个规则(来自 192.168.5.104 的 TX 流量被强制使用表 eth0if,等等...):
from 192.168.5.104 table eth0if from 85.255.103.4 table eth1if
然后为每个接口创建路由:
对于 eth0:
default via 192.168.5.1 dev eth0 table eth0if 192.168.5.0/24 via 192.168.5.104 dev eth0 table eth0if 192.168.5.0/24 via 192.168.5.104 dev eth0 table main
对于 eth1:
default via 85.255.103.1 dev eth1 table eth1if 85.255.103.0/24 via 85.255.103.4 dev eth1 table eth1if 85.255.103.0/24 via 85.255.103.4 dev eth1 table main
现在,任何与 eth1 建立的套接字连接都应该从 eth1 回复并成功。但是,任何与 eth1 建立的远程连接从这个不是发往 85.255.103.0/24 的盒子仍然会使用这默认路由(eth0)。
规则:(如果路线不存在,则使用默认路线)
如果您需要使用 eth1 进行传出连接,而您使用的软件不允许您定义源接口/IP,那么您必须为其创建路由。
例如,如果您需要到特定 Google 服务器的主机路由,则可以使用:
74.125.224.194/32 via 85.255.103.1 dev eth1 src 85.255.103.4 table eth1if
或者,如果您想对子网执行相同操作,您可以:
74.125.224.0/24 via 85.255.103.1 dev eth1 src 85.255.103.4 table eth1if