apache - NAT 端口转发不起作用,而 ssh 隧道起作用
问题描述
我有一个 LXC 容器 apache2 安装(容器在 192.168.122.179:80 上监听)。
主机是 10.138.141.216。
如果我通过 ssh 隧道: ssh -L 45678:192.168.122.179:80 myuser@10.138.141.216 从我的电脑我得到 apache2 页面(浏览器到http://localhost:45678)
但是如果我断开 ssh 隧道并且只使用 iptables http://10.138.141.216:45678将不起作用:
[~]$ sudo iptables -t nat -L -n -v
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
9 564 DNAT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:45678 to:192.168.122.179:80
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 RETURN all -- * * 192.168.122.0/24 224.0.0.0/24
2 656 RETURN all -- * * 192.168.122.0/24 255.255.255.255
606 36360 MASQUERADE tcp -- * * 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
0 0 MASQUERADE udp -- * * 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
725 101K MASQUERADE all -- * * 192.168.122.0/24 !192.168.122.0/24
每当我在浏览器中刷新页面时,我都可以看到 pkts 和字节数发生变化,但我得到的只是“无法访问此站点”。
所以 ssh 隧道有效,而 iptables 规则不...
更新:
使用 tcpdump 我可以看到“tcp port eba unreachable”,为什么???
14:46:40.672318 IP 10.79.41.37.57504 > mymachine.eba: Flags [S], seq 2646922897, win 8192, options [mss 1360,nop,wscale 8,nop,nop,sackOK,unknown-33 0x21cc167ee1203a070000], length 0
14:46:40.672402 IP mymachine > 10.79.41.37: ICMP mymachine tcp port eba unreachable, length 72
wget http://192.168.122.179在主机内部工作...
解决方案
我不知道为什么,但 LXC 默认添加了以下规则:
REJECT all -- * virbr0 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
REJECT all -- virbr0 * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
这些在使用时不可见
iptables -t 任意-L -n -v
删除“-t any”显示它们。删除这些规则就成功了。
推荐阅读
- javascript - 当我单击 next.js (react) 应用程序上的链接时,浏览器的进度条不可见
- ios - RealityKit:无法为非 AR 应用程序创建 ARView
- google-apps-script - 如何处理来自 Google 脚本库中 HTML 文件的回调
- swift - 我正在尝试将字符串日期转换为日期,但即使在设置 dateFormat 后它仍然返回 nil
- flutter - 如何对颤振进行响应性测试
- sql - 从每周计算月收入
- python - 如何在机器人框架中生成随机电子邮件?
- r - R中的插入符号包:当我重复测量时,如何将数据分成75%的测试和25%的训练?
- java - 我的 api REST 调用 OSB oracle 服务总线有什么问题,jdeveloper
- javascript - 如何按顺序查询列表的内容?