我有一个局域网、一个服务器和一个虚拟机
lan: 192.168.50.0/24
linux server: 192.168.50.3
linux VM guest: 192.168.50.1 (with apache)
我希望 Linux 服务器将来自 LAN 和端口 80 的所有请求重定向到 192.168.50.1:80
我使用这些,但没有结果:-/
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.50.1:80
iptables -A FORWARD -p tcp -d 192.168.50.1 --dport 80 -j ACCEPT
iptables -A POSTROUTING -t nat -s 192.168.50.1 -o eth0 -j MASQUERADE
ip_forward is 1
答案1
在您的设置中,通常不需要端口转发。(极少数情况下需要所谓的 Hairpin NAT,即内部使用 NAT,但从您的描述来看,情况似乎并非如此)
当内部、非全局可路由 (RFC1918) 主机共享有限数量(通常只有一个)公共可路由 IP 地址(称为非 RFC1918)时,将使用端口转发。本机地址转换 (NAT)(又称伪装)用于实现此目的。您的地址前缀 192.168.xx 是 RFC1918 的一部分。
端口转发用于公共互联网上的客户端需要通过防火墙访问 NAT 后面的主机的情况。
就您而言,所有主机都是 RFC1918 且位于同一网络上,因此不需要 NAT。您只需要正确配置 IP 网络。
NAT 表中的 PREROUTING 和 POSTROUTING 规则用于本机地址转换,您不需要它。
假设您已将虚拟机配置为桥接,并且您的网络拓扑正确,您的主机共享相同的 IPV4 LAN (192.168.50.0/24)。因此,您的系统中无需路由器,因此不需要 FORWARD 规则。转发规则仅在启用了 IP 转发的路由器上才有意义。
除非您的网络配置错误或遗漏了问题中的信息,否则简单的答案是,IP 范围 192.168.50.2 到 192.168.50.254 内的所有客户端都应该能够访问 192.168.50.1,而无需涉及 iptables。