端口转发与iptables和debian

我有一个局域网,一台服务器和一台虚拟机

lan: 192.168.50.0/24 linux server: 192.168.50.3 linux VM guest: 192.168.50.1 (with apache) 

我希望Linux服务器将所有请求从局域网和端口80redirect到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 

在您的设置中,端口转发通常不是必需的。 (在很less的情况下,需要所谓的发夹式NAT,其中NAT是在内部使用的,但是这并不适用于你所描述的情况)

端口转发用于内部非全局可路由(RFC1918)主机共享有限数量(通常只有一个)可公开路由的IP地址(称为非RFC1918)的情况。 本地地址转换,NAT(aka Masquerading)被用来做这个工作。 您的地址前缀192.168.xx是RFC1918的一部分。

端口转发用于安装公共互联网的客户端需要通过防火墙访问NAT后面的主机。

在你的情况下,你所有的主机都是RFC1918,并且在同一个networking上,所以不需要NAT。 您只需要正确configurationIPnetworking。

NAT表中的PREROUTING和POSTROUTING规则用于本地地址转换,这是您不需要的。

假设您将虚拟机configuration为网桥,并且您的networking拓扑结构正确,则您的主机将共享相同的IPV4 LAN(192.168.50.0/24)。 因此,您的系统中不需要有路由器,因此FORWARD规则不是必需的。 转发规则只有在启用了IP转发的路由器上才有意义。

除非你错误的configuration了你的networking,或者从你的问题中忽略了一些信息,否则简单的答案就是你所有的IP地址范围为192.168.50.2到192.168.50.254的客户端应该能够访问192.168.50.1而不需要涉及iptables。