具有负载平衡 ppp 连接的策略路由

具有负载平衡 ppp 连接的策略路由

这是我使用 Debian 6.0 的设置。 6.它的作用是使用八个3G调制解调器的代理服务器和负载平衡器。

每当 ppp 连接拨号时,它都会接管默认网关,这没问题,但也会让我陷入困境。没问题的原因是,在 Ubuntu 中,我注意到默认情况下它不会这样做。默认情况下,它将保持 ethX 网关不变。我本可以在 ppp 选项文件中添加,replacedefaultroute但 Ubuntu 中的 iptables 问题让我改用 Debian。

现在我无法 ping 通 LAN 上的其他主机,但其他主机可以 ping 我。我也失去了与外部的连接,我获得访问的唯一方法是通过 LAN 内部的另一台计算机。而且 LAN 中的所有主机都可以使用代理。

我发现如果我添加一个名为e1并复制

192.168.2.0/24 dev eth0  proto kernel  scope link  src 192.168.2.126
default via 192.168.2.3 dev eth0

从主表进入表e1然后执行:

ip rule add table e1

它可以工作,但这不是我想要的,因为所有连接现在都流经 eth0 接口。

我可以尝试什么来恢复来自外部的连接,并与本地计算机进行通信。然而,来自 LAN 的所有流量仍必须通过 ppp 链路进行。

root@proxy:~# iptables -L OUTPUT -t mangle -v
Chain OUTPUT (policy ACCEPT 433K packets, 217M bytes)
pkts bytes target     prot opt in     out     source               destination
433K  217M CONNMARK   all  --  any    any     anywhere             anywhere            CONNMARK restore
 929 61011 MARK       all  --  any    any     anywhere             anywhere            state NEW statistic mode nth every 8 MARK set 0x1
 929 61721 MARK       all  --  any    any     anywhere             anywhere            state NEW statistic mode nth every 8 packet 1 MARK set 0x2
 929 61461 MARK       all  --  any    any     anywhere             anywhere            state NEW statistic mode nth every 8 packet 2 MARK set 0x3
 929 61438 MARK       all  --  any    any     anywhere             anywhere            state NEW statistic mode nth every 8 packet 3 MARK set 0x4
 929 61530 MARK       all  --  any    any     anywhere             anywhere            state NEW statistic mode nth every 8 packet 4 MARK set 0x5
 929 61022 MARK       all  --  any    any     anywhere             anywhere            state NEW statistic mode nth every 8 packet 5 MARK set 0x6
 929 61738 MARK       all  --  any    any     anywhere             anywhere            state NEW statistic mode nth every 8 packet 6 MARK set 0x7
 928 61224 MARK       all  --  any    any     anywhere             anywhere            state NEW statistic mode nth every 8 packet 7 MARK set 0x8
433K  217M CONNMARK   all  --  any    any     anywhere             anywhere            CONNMARK save


root@proxy:~# iptables -L POSTROUTING -t nat -v
Chain POSTROUTING (policy ACCEPT 285 packets, 18881 bytes)
 pkts bytes target     prot opt in     out     source               destination
  743 49005 MASQUERADE  all  --  any    ppp0    anywhere             anywhere
  705 47291 MASQUERADE  all  --  any    ppp1    anywhere             anywhere
  679 45581 MASQUERADE  all  --  any    ppp2    anywhere             anywhere
  679 45598 MASQUERADE  all  --  any    ppp3    anywhere             anywhere
  670 45177 MASQUERADE  all  --  any    ppp4    anywhere             anywhere
  638 42447 MASQUERADE  all  --  any    ppp5    anywhere             anywhere
  724 48671 MASQUERADE  all  --  any    ppp6    anywhere             anywhere
  679 45182 MASQUERADE  all  --  any    ppp7    anywhere             anywhere
root@proxy:~#

root@proxy:~# ip rule
0:      from all lookup local
32758:  from all fwmark 0x8 lookup d8
32759:  from all fwmark 0x7 lookup d7
32760:  from all fwmark 0x6 lookup d6
32761:  from all fwmark 0x5 lookup d5
32762:  from all fwmark 0x4 lookup d4
32763:  from all fwmark 0x3 lookup d3
32764:  from all fwmark 0x2 lookup d2
32765:  from all fwmark 0x1 lookup d1
32766:  from all lookup main
32767:  from all lookup default

root@proxy:~# ip ro sh t d1
default via 10.64.64.64 dev ppp0
root@proxy:~# ip ro sh t d2
default via 10.64.64.65 dev ppp1
root@proxy:~# ip ro sh t d3
default via 10.64.64.66 dev ppp2
root@proxy:~# ip ro sh t d4
default via 10.64.64.67 dev ppp3
root@proxy:~# ip ro sh t d5
default via 10.64.64.68 dev ppp4
root@proxy:~# ip ro sh t d6
default via 10.64.64.69 dev ppp5
root@proxy:~# ip ro sh t d7
default via 10.64.64.70 dev ppp6
root@proxy:~# ip ro sh t d8
default via 10.64.64.71 dev ppp7


root@proxy:~# ip ro
10.64.64.67 dev ppp3  proto kernel  scope link  src 10.90.33.221
10.64.64.66 dev ppp2  proto kernel  scope link  src 10.18.11.90
10.64.64.65 dev ppp1  proto kernel  scope link  src 10.90.14.235
10.64.64.64 dev ppp0  proto kernel  scope link  src 10.18.27.226
10.64.64.71 dev ppp7  proto kernel  scope link  src 172.22.201.81
10.64.64.70 dev ppp6  proto kernel  scope link  src 10.80.131.6
10.64.64.69 dev ppp5  proto kernel  scope link  src 172.20.17.183
10.64.64.68 dev ppp4  proto kernel  scope link  src 10.80.61.34
192.168.2.0/24 dev eth0  proto kernel  scope link  src 192.168.2.126
default via 192.168.2.3 dev eth0
root@proxy:~#

如果您能给我一些想法,我将不胜感激。

答案1

  1. 当我在路由器上转发该死的 SSH 端口时,从外部访问是好的。
  2. 只有在 iptables 中发出此命令后,才能与 192.168.2.0/24 网络中的其他计算机进行通信 在这种情况下,我只希望 .253(本地 DNS)与我交谈(.126)

    iptables -A OUTPUT -t mangle -s 192.168.2.126 -d 192.168.2.253 -j MARK --set-mark 16

在 iptables 列表中,我有一些规则,基本上规定,每个新连接都应该被标记,并执行路由决策,然后通过 POSTROUTING 链。由于现在我用特定标准(标签标记 16)标记数据包,ip 规则将与 fwmarks 不匹配,因此唯一的路由在 ip 规则的默认主表中找到

192.168.2.0/24 dev eth0  proto kernel  scope link  src 192.168.2.126  metric 1 

答案2

在 OUTPUT 中,您标记每个新数据包,即使其目标地址位于您的 LAN 中。

您的 ppp 路由表只有一个默认条目。这意味着进入这些表之一的每个数据包将始终通过 ppp* 上的网关进行路由。即使该数据包的目标地址位于您的 LAN 中。这是因为规则是按照优先级递增的顺序进行评估的,并且您的 d[0-8] 表会在 之前尝试main

因此,对您的 lan 的 ping 会被路由到您的 ppp 设备,并进行 NAT...因此,如果它们有效,那是因为所选的 ppp 网关在其路由表中具有另一台具有相同 IP 地址的主机。

我会将每个 LAN 规则放在一个单独的表中,该表在 d[0-8] 表之前进行尝试,以便应该流向您的 LAN 的流量会流向您的 LAN。

相关内容