将 Linux 机器连接到辅助路由器/ISP:如何正确设置路由?

将 Linux 机器连接到辅助路由器/ISP:如何正确设置路由?

抽象的:

我在现有网络设置中添加辅助 ISP 时遇到了(我认为是路由)问题:通过的传入流量Router1没有得到应答,但本地流量和传入流量Router0工作正常。

我怎样才能使当前运行良好的部分保持正常运转,同时使传入流量正常Router1运行?

阐述:

我在下面绘制了一张图表,显示了情况的基本内容(实际上每个 LAN 上都有更多设备,但这些并不重要)。

情况如下:

  • 我有两个内部网络:LAN0is192.168.x.0/24LAN1is 192.168.y.0/24。 这两个网络都适用于内部流量(例如http使用卷曲)。
  • LAN0一直通过Router0和连接ISP0Internet
  • LAN1一直 都有Router1, 但 现在 已 连接ISP1到 了Internet
  • LAN0只有打开并具有默认路由的机器才能Router0正常工作以处理传出和传入的流量。
  • LAN1只有打开并具有默认路由的机器才能Router1正常工作以处理传出和传入的流量。
  • 内部交通LAN0一直LAN1畅通。
  • 通过的传入流量正确Router1到达WindowsB:我可以通过 RDP 从 连接到它WindowsC
  • 传入流量通过Router1到达LinuxB(根据tcpdump),但没有回答,因为curl http://e.f.g.h前者LinuxCtcpdump 开启 LinuxB显示:

它仅显示符合以下条件的数据包:tcpdump 输出格式- 有一个同步标志设置:

LinuxB:/tmp/LinuxB.eth1.80 # tcpdump -i eth1 'port 80'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
13:35:19.489779 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 1287047182 ecr 0,sackOK,eol], length 0
13:35:19.788841 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 1287047478 ecr 0,sackOK,eol], length 0
13:35:19.888835 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 1287047578 ecr 0,sackOK,eol], length 0
13:35:19.989412 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 1287047678 ecr 0,sackOK,eol], length 0
13:35:20.089685 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 1287047778 ecr 0,sackOK,eol], length 0
13:35:20.190836 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 1287047877 ecr 0,sackOK,eol], length 0
13:35:20.392123 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 1287048072 ecr 0,sackOK,eol], length 0
13:35:20.693692 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,sackOK,eol], length 0
13:35:21.197162 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,sackOK,eol], length 0
13:35:22.204134 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,sackOK,eol], length 0
13:35:24.115961 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,sackOK,eol], length 0
13:35:27.852374 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,sackOK,eol], length 0
13:35:31.967049 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,sackOK,eol], length 0

这是LinuxB路由表:

LinuxB:/tmp/LinuxB.eth1.80 # route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.x.1     0.0.0.0         UG    0      0        0 eth0
loopback        *               255.0.0.0       U     0      0        0 lo
link-local      *               255.255.0.0     U     0      0        0 eth0
192.168.x.0     *               255.255.255.0   U     0      0        0 eth0
192.168.x.0     *               255.255.255.0   U     0      0        0 eth1

WindowsC由于通过 RDP 从到 的连接WindowsB工作正常,因此我断定这确实是路由问题。这是WindowsB路由表:

C:\temp>route print
===========================================================================
Interface List
0x1 ........................... MS TCP Loopback interface
0x2 ...00 0c 29 35 77 e1 ...... AMD PCNET Family PCI Ethernet Adapter - Packet Scheduler Miniport
0x3 ...00 0c 29 35 77 eb ...... VMware Accelerated AMD PCNet Adapter - Packet Scheduler Miniport
===========================================================================
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0      192.168.x.1     192.168.x.4      10
          0.0.0.0          0.0.0.0      192.168.y.1     192.168.y.4       5
        127.0.0.0        255.0.0.0        127.0.0.1       127.0.0.1       1
      192.168.x.0    255.255.255.0      192.168.x.4     192.168.x.4      10
      192.168.x.4  255.255.255.255        127.0.0.1       127.0.0.1      10
    192.168.x.255  255.255.255.255      192.168.x.4     192.168.x.4      10
      192.168.y.0    255.255.255.0      192.168.y.4     192.168.y.4      10
      192.168.y.4  255.255.255.255        127.0.0.1       127.0.0.1      10
    192.168.y.255  255.255.255.255      192.168.y.4     192.168.y.4      10
        224.0.0.0        240.0.0.0      192.168.x.4     192.168.x.4      10
        224.0.0.0        240.0.0.0      192.168.y.4     192.168.y.4      10
  255.255.255.255  255.255.255.255      192.168.x.4     192.168.x.4       1
  255.255.255.255  255.255.255.255      192.168.y.4     192.168.y.4       1
Default Gateway:       192.168.y.1
===========================================================================
Persistent Routes:
  Network Address          Netmask  Gateway Address  Metric
          0.0.0.0          0.0.0.0      192.168.y.1       5
          0.0.0.0          0.0.0.0      192.168.x.1      10

那么我怎样才能使路由LinuxB变成这样:

  • 保持默认路由LinuxB,以便192.168.x.1传出的流量继续使用Router0/ISP0
  • 继续回应LAN0来自LAN0
  • 继续回应LAN1来自LAN1
  • 继续通过Router0( a.b.c.d/ 192.168.x.1)回答传入的请求192.168.x.1
  • Router1通过( e.f.g.h/ 192.168.y.1)开始应答传入请求192.168.y.1
  • 奖励:具有Router1故障转移或负载平衡Router0

后记:

下面的 PNG 图像生成于统一模型通过免费在线文本植物UML引擎。如果你想查看原始的 UML 文本,请粘贴PNG 图片链接进入这个PlantUML 表单,然后按Submit

在此处输入图片描述

答案1

很久以前,我有一个用于执行类似操作的 shell 脚本,但很抱歉,找不到它。所以我只能给你提供我当时实施的解决方案的指示。我主要根据记忆写作,因此缺少一些示例:

  1. 我为每个上行链路设置了一个路由表 (ip route ... table 101, ip route ... table 102)。这些路由表位于 /etc/iproute2/rt_tables 中。

    101 isp1 102 isp2

    您还需要设置这些表:

    ip route 通过 $Gateway1 dev $Interface1 table isp1 添加默认 ip route 通过 $Gateway2 dev $Interface2 table isp2 添加默认

    #不要忘记默认表:

    ip route 通过 $DefaultGateway dev $DefaultInterface 添加默认

  2. 启用 iptables 连接跟踪(modprobe nf_conntrack)

  3. 为新传入连接设置 iptables 规则,以 -j 以某种方式标记数据包(即:0x201、0x202)
  4. 设置 IP 规则,确保通过接口传出的流量使用正确的路由表

    ip 规则从 $Ip1 表 isp1 添加 ip 规则从 $Ip2 表 isp2 添加

  5. 设置一个 ip 规则(ip 规则添加...),规定“标记为 0x201 的数据包应查找路由表 201”,每个上行链路一个规则。

一切就绪后,您应该能够接收和发起与任何广域网上行链路的连接,甚至平衡传出连接。

这些就是基础知识。Iptables +“ip route”+“ip rule”,一切就绪。

相关内容