iptables规则中的可变主机IP地址

我在笔记本电脑上使用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地址的上行链路。