大多数传出连接被阻止(有点?)

大多数传出连接被阻止(有点?)

我有一台服务器,从 Ubuntu 12.04 升级到了 14.04。现在我遇到了一些非常奇怪的行为(我相信这些行为在升级后不会立即出现,但不能确定):我无法(通过主机名或 IP)ping、ssh、nslookup、curl 或 telnet 任何东西,甚至无法访问路由器 NAT 后面的地址。我甚至无法 ping 网关,我知道网关正在接受 ping,因为我从物理上位于同一网络上的盒子 ping 了它。

但奇怪的是:这个盒子在世界的另一端,而我仍然可以 ssh更奇怪?我运行了 ipsec 和 xl2tpd,这样我就可以通过 VPN 进入。这也很好用。更奇怪?如果我通过 VPN 将 http 流量从世界另一端的计算机路由到此框,我就可以正常浏览互联网。是的,我关闭了这两项服务,但问题并没有解决。

目前我的所有防火墙规则均被禁用:

$ sudo ufw status
Status: inactive

和 iptables:

$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

我的路线看起来正常(192.168.0.1 是正确的网关):

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U     1      0        0 eth0

ifconfig 也没有错误(IP 正确并且已分配 DHCP):

eth0      Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX
          inet addr:192.168.0.12  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::5246:5dff:fe53:975d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:12600 errors:0 dropped:0 overruns:0 frame:0
          TX packets:13748 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:2727272 (2.7 MB)  TX bytes:11775785 (11.7 MB)

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:65536  Metric:1
          RX packets:350 errors:0 dropped:0 overruns:0 frame:0
          TX packets:350 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:33067 (33.0 KB)  TX bytes:33067 (33.0 KB)

我……说实话,我对此一无所知。有人能告诉我这怎么可能吗?或者我可以检查其他什么?syslog 和 dmesg 也没有提供任何线索。

编辑:断开连接的情况如下:

nslookup:

$ nslookup google.com
;; connection timed out; no servers could be reached

$

ping:

$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
<... hangs forever>
^C
--- 8.8.8.8 ping statistics ---
195 packets transmitted, 0 received, 100% packet loss, time 195553ms
$

ping 网关:

$ ping 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
<... hangs forever>
^C
--- 192.168.0.1 ping statistics ---
47 packets transmitted, 0 received, 100% packet loss, time 46361ms
$

stackoverflow.com 上的 curl:

$ curl 198.252.206.16
<... hangs forever>
^C
$

答案1

感谢上面评论中的 Hrvoje Špoljar,我找到了解决方案。事实证明,在遵循以下方法后本指南,我的 rc.local 中有以下命令:

iptables -t nat -A POSTROUTING -j SNAT --to-source %SERVERIP% -o eth+

但 %SERVERIP% 是错误的 IP 地址。所以我的 iptables 中存在错误规则。不幸的是,ubuntu 上的 ufw “保护”您不看到这些更高级的规则,如您在上面的 iptables 输出中看到的那样。另一方面,如果您运行 iptables-save 命令,您将得到以下内容:

# Generated by iptables-save v1.4.21 on Fri Nov 14 21:19:16 2014
*nat
:PREROUTING ACCEPT [318:73010]
:INPUT ACCEPT [64:6615]
:OUTPUT ACCEPT [100:7122]
:POSTROUTING ACCEPT [48:2941]
-A POSTROUTING -s XX.XX.XX.XX/24 -o eth0 -j MASQUERADE
-A POSTROUTING -o eth+ -j SNAT --to-source YY.YY.YY.YY
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
# Completed on Fri Nov 14 21:19:16 2014

YY.YY.YY.YY错误的 IP 地址在哪里。解决方法是使用以下命令删除此规则

iptables -t nat -D POSTROUTING -o eth+ -j SNAT --to-source YY.YY.YY.YY

并使用更加 DHCP 友好的:

iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

其中 10.1.1.0/24 是给予 VPN 客户端的 IP 地址范围。

相关内容