GW 盒不允许内部计算机上网

GW 盒不允许内部计算机上网

我有一个相对较新的 GW 盒(CentOS 6.5),可以 ping www.apple.com。当我将网络内的计算机更改为使用此 GW 作为默认 GW 时,它们无法访问互联网。因此,我将其改回旧 GW,它们可以再次访问互联网。内部计算机是各种 Windows 机器(Vista、Windows 7 等)和各种 Linux 机器(另一个 CentOS 盒、旧的 RedHat Linux 9 机器等)。所以我的问题是:

  1. 为什么新的网关可以 ping 通 www.apple.com,但设置为使用该网关的内部计算机却无法 ping 通 www.apple.com?换句话说,为什么该网关不允许通过它访问互联网?
  2. 我可以在较新的 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

好的,我找到了问题。关键是运行以下命令并查看输出:

  1. iptables-save 并查看输出。任何引用网络接口的行都特别重要。
  2. 运行 ifconfig 以获取接口设置
  3. 运行 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

我希望这可以帮助其他人避免这种错误。

相关内容