我有一些运行在 Apache 下的网站。它们可以从 LAN 完美访问。
我还设置了部分服务器以便从 WAN 访问。这在开始时很有效(毫无疑问,这是新手的运气),但现在ERR_CONNECTION_RESET
总是出现问题。我尝试了所有能想到的办法,甚至重新安装了 Apache,但现在我已经没有主意了。
端口转发已正确设置,并已通过 验证nmap
。本地和远程扫描均显示我的端口已打开。
我仔细检查了我的ufw
规则并启用了日志记录。日志显示[UFW ALLOW]
本地和远程传入连接均收到数据包。
我已经从客户端运行了 Wireshark 捕获。在(失败的)远程连接场景中,仅交换了三个数据包:
1 0.000000000 [local_IP] [remote_IP] TCP 66 49527→1123 [SYN] Seq=0 Win=8192 Len=0 MSS=1460 WS=256 SACK_PERM=1
2 0.058425000 [remote_IP] [local_IP] TCP 66 1123→49527 [SYN, ACK] Seq=0 Ack=1 Win=29200 Len=0 MSS=1320 SACK_PERM=1 WS=128
3 0.058504000 [local_IP] [remote_IP] TCP 54 49527→1123 [ACK] Seq=1 Ack=1 Win=16384 Len=0
显著的区别在于,当从 LAN 成功连接时,第二个数据包将具有MSS=1460
,而第三个数据包将具有Win=65536
。并且发送时,第四个数据包包含GET
以我的 LAN IP 作为源的 HTTP 命令,依此类推。
如果我tcpdump
在服务器端使用,我会在有问题的(WAN 端)场景中得到以下信息(connection reset
收到后调用的中断):
$ sudo tcpdump -n -tttt -i eth0 port 1123
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
2015-07-14 06:38:45.291695 IP 92.95.32.112.49361 > 192.168.1.10.1123: Flags [S], seq 3726787794, win 8192, options [mss 1320,nop,wscale 8,nop,nop,sackOK], length 0
2015-07-14 06:38:45.291735 IP 192.168.1.10.1123 > 92.95.32.112.49361: Flags [S.], seq 2812896430, ack 3726787795, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
2015-07-14 06:38:45.351536 IP 92.95.32.112.49361 > 192.168.1.10.1123: Flags [.], ack 1, win 64, length 0
^C
3 packets captured
3 packets received by filter
0 packets dropped by kernel
当本地连接时,它看起来像这样;请注意第三个数据包上的不同窗口大小:
$ sudo tcpdump -n -tttt -i eth0 port 1123
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
2015-07-14 06:41:33.112315 IP 192.168.1.50.49379 > 192.168.1.10.1123: Flags [S], seq 3570261874, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
2015-07-14 06:41:33.112357 IP 192.168.1.10.1123 > 192.168.1.50.49379: Flags [S.], seq 3490289174, ack 3570261875, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
2015-07-14 06:41:33.512742 IP 192.168.1.50.49379 > 192.168.1.10.1123: Flags [.], ack 1, win 256, length 0
2015-07-14 06:41:33.514046 IP 192.168.1.50.49379 > 192.168.1.10.1123: Flags [P.], seq 1:433, ack 1, win 256, length 432
2015-07-14 06:41:33.514079 IP 192.168.1.10.1123 > 192.168.1.50.49379: Flags [.], ack 433, win 237, length 0
2015-07-14 06:41:33.554794 IP 192.168.1.10.1123 > 192.168.1.50.49379: Flags [.], seq 1:1461, ack 433, win 237, length 1460
2015-07-14 06:41:33.554818 IP 192.168.1.10.1123 > 192.168.1.50.49379: Flags [P.], seq 1461:2768, ack 433, win 237, length 1307
[...]^C
919 packets captured
919 packets received by filter
0 packets dropped by kernel
我注意到该服务显然只与tcp6
ssh 服务器一起运行;这可能是原因吗?更新:显然不是强制的Listen 0.0.0.0:1123
,但从 WAN 端连接时问题仍然存在。/etc/apache2/ports.conf
tcp
$ sudo netstat -plunt | grep ssh
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1510/sshd
tcp6 0 0 :::22 :::* LISTEN 1510/sshd
$ sudo netstat -plunt | grep apache2
tcp6 0 0 :::1123 :::* LISTEN 3290/apache2
我无法/var/log/apache2
使用以下方法捕获有关这些事件的任何信息:LogLevel info
、LogLevel debug
和LogLevel trace8
(以及适当的服务重启)。在所有情况下,文件夹中的所有文件在连接失败之前和之后都保留相同的日期戳。
我可能错了,但由于 Apache 提供的信息太少,我现在想知道这是否与外部链接的 SQL 或 PHP 问题有关,但实际上我对此没有任何经验。这里讨论的服务是 ownCloud。
关于如何进一步排除故障并找出可能出现的问题,您有什么想法吗?
答案1
首先检查端口是否正常工作。您可以使用端口扫描工具执行此操作,例如这如果有问题,请再次检查您的 IP,因为您可能拥有动态 IP,并且经过一段时间的更改,如果它没问题或测试结果没问题,那么可能您在家里设置了动态 IP。从您的网络连接为自己设置一个静态 IP,例如这里。并且,您可以防止他人获取相同的 IP,因为您在调制解调器设置中保留了此 IP。保留 IP 非常简单,在您的调制解调器下找到 dhcp 设置,假设您的调制解调器位于 192.168.1.1 上,您自己设置为 192.168.1.2,在本例中,在 dhcp 设置中输入 192.168.1.3 作为起点,如果这些都不起作用,请联系您的 ISP,在某些国家/地区,某些端口可能不允许打开,例如,我半年前在塞浦路斯,在那里禁止打开端口 80。
- 更新 -
据我所知,作为另一台计算机的客户端,您可以连接,但作为服务器,当您尝试连接时无法看到页面。这是一个主要问题,除非您不使用代理路由器,否则无法路由从自身发出的请求,尝试使用网络代理,在这种情况下,它可能会起作用。您对此无能为力,因为服务器没有代理就无法连接到您自己的网络