我安装了带有 vsftpd 的 Lubuntu 14.04 LTS 和 lamp stack(apache2 等)。局域网上一切正常。在外部,服务不确认连接尝试。我可以看到数据包到达机器tcpdump-i eth0 -A
,但机器没有发送相应的 ACK。sudo ufw status
报告“状态:非活动”。我没有在“iptables”中配置任何规则;iptables -L
有空白输出。
更令人困惑的是,我可以使用分配给该计算机的外部 WAN IP 和网络内部的主机名,并且连接成功。要在外部使用 WAN IP 和主机名,我会得到与 Ubuntu 不发送 ACK 数据包相同的行为。
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 1494/mysqld
tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN 1277/dnsmasq
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 984/vsftpd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 977/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 669/cupsd
tcp6 0 0 :::80 :::* LISTEN 2175/apache2
tcp6 0 0 :::22 :::* LISTEN 977/sshd
tcp6 0 0 ::1:631 :::* LISTEN 669/cupsd
在不透露太多信息的情况下,该 LAN 是 A 类专用 10.xxx/22 网络。服务器有一个 NIC,在业务 VLAN 中分配了静态地址。服务器的另一个 NIC 在 DMZ 中有一个私有 C 类 192.168.xx/24 静态地址。
对两个内部地址的 nmap 扫描显示相同的输出,如下所示:
Nmap scan report for 192.168.x.x/10.x.x.x
Host is up (0.0018s latency).
Not shown: 996 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
80/tcp open http
3306/tcp open mysql
Nmap done: 1 IP address (1 host up) scanned in 0.36 seconds
对外部 IP 的扫描显示所有端口均已“过滤”,这意味着 nmap 未获得 SYN/ACK 或 ACK 响应。
Starting Nmap 5.21 ( http://nmap.org ) at 2015-02-10 06:28 UTC
Host is up.
PORT STATE SERVICE
21/tcp filtered ftp
22/tcp filtered ssh
80/tcp filtered http
3306/tcp filtered mysql
答案1
您的服务是否正在监听所有接口?例如,请发布以下命令:
# netstat -atpn | grep 80 | grep LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2994/httpd
如果它没有显示 0.0.0.0 或 WAN 的 IP,那么它没有配置为侦听您期望的位置。
答案2
我最终弄清楚了这一点。这不是直接的防火墙问题。我有两个 NIC,一个用于 LAN,另一个用于 DMZ,WAN IP 已通过 NAT 转换到这两个 NIC。默认路由是通过 LAN。当从互联网接收数据包时,服务器尝试通过 LAN 上的默认路由进行响应。断开与 LAN 的连接使服务能够通过 Internet 进行通信。
我仍然需要专用 LAN 通信,但我稍后会解决这个问题。