多个以太网接口

多个以太网接口

我有两张网卡,配置如下:

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 来实现更快的连接,因此我们将其保留为默认路由。

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

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

    100 eth0if
    101 eth1if
    
  2. 创建两个规则(来自 192.168.5.104 的 TX 流量被强制使用表 eth0if,等等...):

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

    • 对于 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
    

相关内容