iptables的端口转发
时间:2009-03-29 来源:CUDev
目标:对于Host A通过Host B:80访问Host C:80
情况1:Host C跟Host B的局域网中,也就是说Host C的网关是Host B
这种情况就是我们经常讨论和使用的DNAT,例如网关IP为1.2.3.4,其内网IP为192.168.2.1,存在一个内网主机192.168.2.2提供web服务。
iptables -t nat -A PREROUTING -d 1.2.3.4 -p tcp --dport 80 -j DNAT --to-destination 192..168.2.2
情况2:如果Host C的默认网关不是Host B,也就是说Host C不是Host B内部网络中的一个主机的这种情况。
这种情况下,在应用层有很多的方法,像squid、datapipe等都可以实现这样的反向代理。
但是对于netfilter只有在Host A的IP地址已知的情况下可以实现这种反向代理,而无法做到像squid那样灵活的反向代理。这里面最主要的原因在于这种反向代理需要维护两个连接,而netfilter现在没有这个能力,只有在上层的socket层实现。当然如果代理请求的源地址只有一个的话,就没有问题了,就是我们讨论的这种情况。
将$IP1 通过$IP2:80 访问 $IP3:80
修改目的地址和源地址
#修改目的地址
iptables -t nat -A PREROUTING -d $IP2 -p tcp --dport 80 -j DNAT
--to-destination $IP3
#修改源地址
iptables -t nat -A POSTROUTING -d $IP3 -p tcp --dport 80 -j SNAT
--to-source $IP2
#修改目的地址
iptables -t nat -A PREROUTING -s $IP3 -p tcp --sport 80 -j DNAT
--to-destination $IP1
#修改源地址
iptables -t nat -A POSTROUTING -s $IP3 -p tcp --sport 80 -j SNAT
--to-source $IP2
参考:
http://proudeng.spaces.live.com/Blog/cns!C924C414C7191D53!557.entry
情况1:Host C跟Host B的局域网中,也就是说Host C的网关是Host B
这种情况就是我们经常讨论和使用的DNAT,例如网关IP为1.2.3.4,其内网IP为192.168.2.1,存在一个内网主机192.168.2.2提供web服务。
iptables -t nat -A PREROUTING -d 1.2.3.4 -p tcp --dport 80 -j DNAT --to-destination 192..168.2.2
情况2:如果Host C的默认网关不是Host B,也就是说Host C不是Host B内部网络中的一个主机的这种情况。
这种情况下,在应用层有很多的方法,像squid、datapipe等都可以实现这样的反向代理。
但是对于netfilter只有在Host A的IP地址已知的情况下可以实现这种反向代理,而无法做到像squid那样灵活的反向代理。这里面最主要的原因在于这种反向代理需要维护两个连接,而netfilter现在没有这个能力,只有在上层的socket层实现。当然如果代理请求的源地址只有一个的话,就没有问题了,就是我们讨论的这种情况。
将$IP1 通过$IP2:80 访问 $IP3:80
修改目的地址和源地址
#修改目的地址
iptables -t nat -A PREROUTING -d $IP2 -p tcp --dport 80 -j DNAT
--to-destination $IP3
#修改源地址
iptables -t nat -A POSTROUTING -d $IP3 -p tcp --dport 80 -j SNAT
--to-source $IP2
#修改目的地址
iptables -t nat -A PREROUTING -s $IP3 -p tcp --sport 80 -j DNAT
--to-destination $IP1
#修改源地址
iptables -t nat -A POSTROUTING -s $IP3 -p tcp --sport 80 -j SNAT
--to-source $IP2
参考:
http://proudeng.spaces.live.com/Blog/cns!C924C414C7191D53!557.entry
相关阅读 更多 +