多个以太网接口

我有一个两个网卡,像这样configuration:

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通过它。

删除为eth0(192.168.5.1)定义的网关。 如果您需要多个默认路由,您将不得不使用iproute2为其创build策略。

看来你必须删除第二个默认网关:

  • 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

在这样的情况下,最好是明确的。

有很多原因可能导致您无法在eth1上ping或ssh到IP,但是对于初学者,您应该configuration基于策略的路由,以强制stream量使用与用于RX的TX相同的接口。

你希望stream量使用eth0来实现更快速的连接,所以我们将把它留给默认路由。

接下来,我们将定义表格,创build规则,然后创build路线。

  1. 在/ etc / iproute2 / rt_tables中定义两个表,如下所示:

     100 eth0if 101 eth1if 
  2. 创build两条规则(来自192.168.5.104的TXstream量被强制使用表eth0if等):

     from 192.168.5.104 table eth0if from 85.255.103.4 table eth1if 
  3. 然后为每个接口创build路由:

    • 对于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中回复并且成功。 但是, 这个盒子中发出的不是85.255.103.0/24的任何远程连接仍将使用默认路由(eth0)。

规则:(如果路由不存在,则使用默认值)

如果您需要使用eth1作为传出连接,而您使用的软件不允许您定义源接口/ IP,则必须为其创build路由。

  • 例如,如果您需要到特定的谷歌服务器的主机路由,您可以使用:

     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