![无法找到外部 IP 地址被阻止的位置(nginx、nodejs、linksys 路由器)](https://linux22.com/image/981375/%E6%97%A0%E6%B3%95%E6%89%BE%E5%88%B0%E5%A4%96%E9%83%A8%20IP%20%E5%9C%B0%E5%9D%80%E8%A2%AB%E9%98%BB%E6%AD%A2%E7%9A%84%E4%BD%8D%E7%BD%AE%EF%BC%88nginx%E3%80%81nodejs%E3%80%81linksys%20%E8%B7%AF%E7%94%B1%E5%99%A8%EF%BC%89.png)
因此,虽然这不是最理想的,但我目前在 Linksys 路由器后面有一个运行 Ubuntu 14.04 的 Web 服务器。在路由器上,我分别转发了 SSH、HTTP 和 HTTPS 的端口 22、80 和 435。
现在,运行一个非常简单的 nginx 反向代理,将端口 80 路由到监听本地端口 3001 的非常简单的节点脚本,我可以从本地网络上的任何位置打开 Web 浏览器并访问端口 80 上的服务器公共 IP 并获取正确的响应。
当我尝试通过 iPhone 信号连接到相同的公共 IP 时(对我来说,使用外部 IP 是最简单的方法),我收到一条错误消息,提示“网络连接丢失”。我尝试禁用 ufw,但这是我当前的 ufw 状态:
To Action From
-- ------ ----
22 ALLOW Anywhere
80/tcp ALLOW Anywhere
80 ALLOW Anywhere
Nginx Full ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
80 (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
我最近刚刚启用了该Nginx Full
配置文件,希望它能够有所帮助,但事实并非如此。
运行tcpdump -i em1 port 80 -s 0 -w capture.cap
,尝试在我的 iPhone 上连接,然后运行tcpick -C -yP -r capture.cap
得到以下结果:
Timeout for connections is 600
tcpick: reading from capture.cap
1 SYN-SENT IPHONE_IP:12649 > LOCAL_IP:http
1 SYN-RECEIVED IPHONE_IP:12649 > LOCAL_IP:http
2 SYN-SENT IPHONE_IP:12649 > LOCAL_IP:http
3 SYN-SENT IPHONE_IP:12649 > LOCAL_IP:http
4 SYN-SENT IPHONE_IP:21998 > LOCAL_IP:http
4 SYN-RECEIVED IPHONE_IP:21998 > LOCAL_IP:http
5 SYN-SENT IPHONE_IP:21998 > LOCAL_IP:http
6 SYN-SENT IPHONE_IP:21998 > LOCAL_IP:http
7 SYN-SENT IPHONE_IP:9256 > LOCAL_IP:http
7 SYN-RECEIVED IPHONE_IP:9256 > LOCAL_IP:http
8 SYN-SENT IPHONE_IP:9256 > LOCAL_IP:http
9 SYN-SENT IPHONE_IP:9256 > LOCAL_IP:http
tcpick: done reading from capture.cap
下面是我最基本的 nginx 配置:
server {
listen 80;
server_name mgmcdermott.com;
location / {
proxy_pass http://127.0.0.1:3001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_read_timeout 180s;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
我的直觉告诉我,因为我可以在本地访问该网站,所以一定是我的路由器阻止了外部请求,但是,我能够通过路由器远程 SSH,并尝试禁用所有防火墙,但没有成功。
我具有编程知识和服务器端设置的基本知识,但我对在路由器后面使用 Ubuntu 和 nginx 进行全新安装还不熟悉。
如果需要的话,我愿意彻底清除 Ubuntu 并重新安装
最后,我想说的是,在发布 StackExchange 问题方面,我有点缺乏经验。我读过上千个问题,但很少发现这里没有的问题可以发布,所以如果我漏掉了什么,请多包涵。
谢谢!
编辑:
使用 traceroute 命令,它显示网络超时,其中 !X 表示“管理上禁止通信”:
1-4. Pings across work network
5. * * *
6. * * *
7. * * *
...
19. * * * LAST_PINGED_IP_AT_STEP_4 1.491 ms !X
...
我看到出现了 !X,意思是通信被行政禁止,不确定是否有帮助。
更多信息...
$ sudo netstat -tclp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 localhost:mysql *:* LISTEN 1339/mysqld
tcp 0 0 *:http *:* LISTEN 1301/nginx
tcp 0 0 *:ssh *:* LISTEN 1262/sshd
tcp6 0 0 [::]:ssh [::]:* LISTEN 1262/sshd
tcp6 0 0 [::]:3001 [::]:* LISTEN 1395/node
答案1
经过进一步的调试后,我发现对端口 80 的请求被以下程序阻止了:
ool-4353e70a.dyn.optonline.net (67.83.231.10)
这个 IP 解析到我的 ISP。结果发现 Optimum 会阻止端口 80,除非你升级服务。*捂脸*
来自文档。目前,Optimum Online Ultra 50、Optimum Online Ultra 75 或 Optimum Online Ultra 101 均可激活端口 80。