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


8

抽象:

将辅助ISP添加到我现有的网络设置中时,我遇到了问题(我认为是路由):Router1不能回答传入流量,但是本地流量和传入Router0可以正常工作。

在通过Router1工作流进来流量的同时,如何保持当前运行良好的部件正常工作?

详细说明:

我已在下面草绘了一个示意图,其中包含了这种情况的基本要点(实际上,每个LAN上都有更多的设备,但这并不重要)。

这种情况:

  • 我有两个内部网络:LAN0is 192.168.x.0/24LAN1is 192.168.y.0/24。两者都适合内部流量(例如使用cURL的http)。
  • LAN0一直通过Router0和连接ISP0Internet
  • LAN1一直都有Router1,但现在已连接ISP1到了Internet
  • 仅在LAN0具有默认路由的机器上Router0可以正常处理传出和传入流量。
  • 仅在LAN1具有默认路由的机器上Router1可以正常处理传出和传入流量。
  • 内部交通上LAN0,并LAN1一直工作得很好。
  • 通过传入流量Router1WindowsB到达正确的:我可以从通过RDP连接到它WindowsC
  • 通过传入流量Router1LinuxB(按到达tcpdump的),但没有回答后面的curl http://e.f.g.h弗朗LinuxC显示与上tcpdump的 LinuxB节目:

它仅显示根据tcpdump输出格式设置了SYN标志的数据包:

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

由于通过RDP从连接WindowsCWindowsB可以正常工作,因此我继续这确实是一个路由问题。这是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

  • 保留默认路由LinuxB192.168.x.1因此传出流量继续使用Router0/ISP0
  • 继续接听来自何处传入请求LAN0LAN0
  • 继续接听来自何处传入请求LAN1LAN1
  • 继续通过Router0a.b.c.d/ 192.168.x.1)通过192.168.x.1
  • 开始通过Router1e.f.g.h/ 192.168.y.1)通过192.168.y.1
  • 奖励:具有Router1故障转移或负载均衡功能Router0

后记:

下面的PNG图片是通过免费的在线PlantUML引擎以UML文本生成的。如果要查看原始的UML文本,请将PNG图像链接粘贴到此PlantUML表单中,然后按。Submit

在此处输入图片说明


刚刚在unix.stackexchange.com/a/23345/69111中找到了一个有趣的答案,我正在研究该答案是否适用于我的案例,以及如何使用来实现它yast
Jeroen Wiert Pluimers 2014年


1
您在unix.stackexchange处的链接解决方案朝着正确的方向发展,并且可以解决linux问题-linux节点具有两个单独的路由表,并根据启动连接的接口使用适当的表。我不知道有任何针对Windows的解决方案。除非真正需要两个子网,否则我将摆脱一个子网,并为两个ISP使用一个路由器。您可以购买可以正确处理两个WAN的路由器,也可以使用另一个Linux系统来完成,这将简化其背后系统的路由。
大卫·麦金托什

@DavidMackintosh我将来会。这是暂时的:光纤实际上是DSL,并且将移至其他光纤地址。该机器是DNS和MX,因此我希望可以从两个ISP访问它们以保持连续性,因为我不确定在光纤变为活动状态之前或之后是否将关闭DSL。
Jeroen Wiert Pluimers 2014年

Answers:


1

很久以前,我有一个执行类似操作的shell脚本,但是很抱歉,可以找到它。因此,我只能为您提供我那时实现的解决方案的指针。我主要从内存中写入内容,因此缺少一些示例:

  1. 我每个上行链路都有一个路由表(ip路由...表101,ip路由...表102)。那进入/ etc / iproute2 / rt_tables。

    101 isp1 102 isp2

    您还需要设置这些表:

    ip路由通过$ Gateway1 dev $ Interface1表isp1添加默认值ip路由通过$ Gateway2 dev $ Interface2表isp2添加默认值

    #不要忘记默认表:

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

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

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

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

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

一切就绪后,您应该能够通过任何广域网上行链路接收和启动连接,甚至平衡传出连接。

这些将是基础。iptables +“ ip路由” +“ ip规则”,您很高兴。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.