我有一个相对较新的 GW 盒(CentOS 6.5),可以 ping www.apple.com。当我将网络内的计算机更改为使用此 GW 作为默认 GW 时,它们无法访问互联网。因此,我将其改回旧 GW,它们可以再次访问互联网。内部计算机是各种 Windows 机器(Vista、Windows 7 等)和各种 Linux 机器(另一个 CentOS 盒、旧的 RedHat Linux 9 机器等)。所以我的问题是:
- 为什么新的网关可以 ping 通 www.apple.com,但设置为使用该网关的内部计算机却无法 ping 通 www.apple.com?换句话说,为什么该网关不允许通过它访问互联网?
- 我可以在较新的 GW 机器上检查哪些 iptable 设置以查看是否阻止了它?我从旧 GW 机器(允许通过)的完全相同的 iptables 开始,根据需要更改 IP(例如,从旧 GW IP 更改为较新的 GW IP)。
谢谢。只需寻找一个起点即可。
编辑:
[root@wmsgateway ~]# cat /proc/sys/net/ipv4/ip_forward
1
[root@wmsgateway ~]# iptables -L -n -v
Chain INPUT (policy ACCEPT 7175 packets, 739K bytes)
pkts bytes target prot opt in out source destination
1 60 LOG tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:9091 LOG flags 0 level 4
0 0 LOG tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:9093 LOG flags 0 level 4
Chain FORWARD (policy ACCEPT 161 packets, 14106 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 6424 packets, 629K bytes)
pkts bytes target prot opt in out source destination
[root@wmsgateway ~]#
请注意,iptables 确实有一些设置,只是您无法通过这种方式看到它们。例如,运行“iptables -L -t nat -v”可获得不同的端口映射。
编辑2:
另外,下面是路由表(外部 IP 已混淆):
+ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
68.AAA.BBB.CC2 0.0.0.0 255.255.255.248 U 0 0 0 eth2
192.168.254.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth2
0.0.0.0 68.AAA.BBB.CC3 0.0.0.0 UG 0 0 0 eth2
其中这两个外部 IP 之间的“AAA”、“BBB”和“CC”相同。
另外,这里是 ifconfig(再次使用与上面完全相同的方式混淆外部 IP):
+ ifconfig
eth0 Link encap:Ethernet HWaddr 80:3F:5D:08:8F:94
inet addr:192.168.254.80 Bcast:192.168.254.255 Mask:255.255.255.0
inet6 addr: fe80::823f:5dff:fe08:8f94/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:410127 errors:0 dropped:0 overruns:0 frame:0
TX packets:385512 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:42227089 (40.2 MiB) TX bytes:37546249 (35.8 MiB)
eth2 Link encap:Ethernet HWaddr 00:24:8C:90:99:FB
inet addr:68.AAA.BBB.CC5 Bcast:255.255.255.255 Mask:255.255.255.248
inet6 addr: fe80::224:8cff:fe90:99fb/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1308912 errors:0 dropped:0 overruns:0 frame:0
TX packets:1192461 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:499876320 (476.7 MiB) TX bytes:179686421 (171.3 MiB)
Interrupt:25 Base address:0xe000
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:106248 errors:0 dropped:0 overruns:0 frame:0
TX packets:106248 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:105325072 (100.4 MiB) TX bytes:105325072 (100.4 MiB)
wlan0 Link encap:Ethernet HWaddr 00:21:00:E3:7E:79
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
有趣的是,eth2 有一个未在路由 -n 中列出的外部 IP。这可能是问题所在吗?
答案1
好的,我找到了问题。关键是运行以下命令并查看输出:
- iptables-save 并查看输出。任何引用网络接口的行都特别重要。
- 运行 ifconfig 以获取接口设置
- 运行 route -n 来获取路由。虽然不是绝对必要的,但它帮助我发现了问题。
因此,就我而言,我有以下情况(修复之前):
iptables-save | grep eth
-A POSTROUTING -o eth1 -j SNAT --to-source 68.AAA.BBB.155
ifconfig
eth0 Link encap:Ethernet HWaddr 80:3F:5D:08:8F:94
inet addr:192.168.254.80 Bcast:192.168.254.255 Mask:255.255.255.0
...
eth2 Link encap:Ethernet HWaddr 00:24:8C:90:99:FB
inet addr:68.AAA.BBB.155 Bcast:255.255.255.255 Mask:255.255.255.248
...
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
...
wlan0 Link encap:Ethernet HWaddr 00:21:00:E3:7E:79
...
显然,我对外部 IP 进行了一些混淆,并将一些 ifconfig 输出替换为“...”,以使其更容易理解。请注意,在 iptables 中,我引用的是 eth1,但不再有 eth1 接口。最初,eth1 引用的是外部 IP,但我们系统中的一些更改删除了该接口并添加了 eth2(这恰好是一个 USB 转以太网适配器,所以我个人认为更改 USB 端口会删除 eth1 并添加 eth2)。无论如何,就我而言,只需将 iptables 更改为引用 eth2 而不是 eth1 即可解决我的问题。这里的关键是告诉 iptables 如何路由传出的数据包(除非其他人有更好的解释)。
所以我将 iptables 从
iptables-save | grep eth
-A POSTROUTING -o eth1 -j SNAT --to-source 68.AAA.BBB.155
到
iptables-save | grep eth
-A POSTROUTING -o eth2 -j SNAT --to-source 68.AAA.BBB.155
我希望这可以帮助其他人避免这种错误。