我在笔记本电脑上使用OpenVZ运行CentOS 6.4。 为了为VE提供Internet访问,我必须在笔记本电脑上应用以下规则:
iptables -t nat -A POSTROUTING -j SNAT --to-source <LAPTOP_IP>
它工作正常。
但是,我必须在办公室,家里,合伙人办公室等不同的地方工作。我的笔记本电脑的IP地址在这些地方是不一样的,所以每当我换个地方的时候都要改变上面的规则。
我已经创build了一个基本上确定IP和应用规则的解决方法:
#!/bin/bash IP=$(ifconfig | awk -F':' '/inet addr/&&!/127.0.0.1/{split($2,_," ");print _[1]}') iptables -t nat -A POSTROUTING -j SNAT --to-source $IP
上述解决方法工作。 我只需要手动执行。 也许我可以让它成为一个挂钩执行任何时候我的笔记本电脑从DHCP获取IP地址 – 我该怎么做?
此外,我只是想知道是否有一个优雅的方式来完成首先 – iptables? 也许有一个语法允许在规则中指定“当前硬件IP地址”?
使用-j MASQUERADE (取自CentOS文档 ):
要允许具有专用IP地址的局域网节点与外部公用networking通信,请将防火墙configuration为IP伪装,这会使用防火墙的外部设备(在本例中为
eth0)的IP地址屏蔽来自局域网节点的请求:[root@myServer ~ ] # iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE此规则使用NAT数据包匹配表(
-t nat),并在防火墙的外部networking设备(-o eth0)上指定-t nat的内置POSTROUTING链(-A POSTROUTING)。
POSTROUTING允许数据包在离开防火墙的外部设备时被改变。
-j MASQUERADE目标被指定为使用防火墙/网关的外部IP地址来掩码节点的私有IP地址。
这是针对没有静态IP地址的上行链路。