我目前正在设置我的服务器。 我使用与vmware类似的proxmox 。 重要的是要知道,我只有1个外部IP地址。 在我的服务器上,我使用以下命令将端口80和443转发到虚拟主机apache :
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
我的networking也与:
iptables -t nat -D POSTROUTING -s '10.0.43.0/24' -o eth0 -j MASQUERADE
现在的问题是,如果我这样redirect端口80和443,apt-get会抛出404错误,当我从VM(在我的门后面)使用它。
我怎样才能redirect端口到我的虚拟机仍然apt-get工作? 我究竟做错了什么 ?
谢谢,
您将所有数据包redirect到端口80和443到您的guest虚拟机,包括它自己的数据包。 添加一个
-i eth0
条件到您的DNAT规则。
你可以检查(与tcpdump)在networking服务器上发生了什么? 我假设缺less这样的一个规则(假设eth1是你的内部接口):
iptables -t nat -A PREROUTING -i eth1 -o eth1 -j SNAT --to $INTERNAL_GATEWAY_IP
没有这个客户端试图连接到1.2.3.4,网关将数据包偏转到10.0.43.113,networking服务器看到来自客户端的连接(例如10.0.43.112),从而将其答复发送到10.0.43.112,并且已经发送到1.2.3.4,从10.0.43.113得到一个答复只是去“WTF?”…但与SNAT的networking服务器响应网关,网关重写源地址和目的地址,大家都很开心。