我目前正在设置我的服务器。我使用proxmox
类似于vmware
。需要知道的重要一点是,我只有 1 个外部 IP 地址。在我的服务器上,我apache
使用以下命令将端口 80 和 443 转发到虚拟主机:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 10.0.43.113
iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to 10.0.43.113
我的网络还与以下内容相关:
iptables -t nat -D POSTROUTING -s '10.0.43.0/24' -o eth0 -j MASQUERADE
现在的问题是,如果我以这种方式重定向端口 80 和 443,则当我从 VM(我的门后面)使用它时,apt-get 会抛出 404 错误。
如何在 apt-get 仍可正常工作的情况下将端口重定向到我的虚拟机?我做错了什么?
谢谢,
答案1
将所有数据包重定向到端口 80 和 443 到您的客户机,包括其自己的数据包。添加
-i eth0
条件到您的 DNAT 规则。
答案2
您能用 tcpdump 检查一下 Web 服务器上发生了什么吗?我假设缺少这样的规则(假设 eth1 是您的内部接口):
iptables -t nat -A PREROUTING -i eth1 -o eth1 -j SNAT --to $INTERNAL_GATEWAY_IP
如果没有这个,客户端会尝试连接到 1.2.3.4,网关会将数据包转向 10.0.43.113,Web 服务器看到来自客户端的连接(例如 10.0.43.112),因此将其回复发送到 10.0.43.112,而客户端发送到 1.2.3.4 并收到来自 10.0.43.113 的回复后,就会说“WTF?”... 但是有了 SNAT,Web 服务器就会响应网关,网关会重写源地址和目标地址,每个人都会很高兴。