这是我使用 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
- 当我在路由器上转发该死的 SSH 端口时,从外部访问是好的。
只有在 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。