我的笔记本电脑上运行的是 CentOS 6.4 和 OpenVZ。为了给 VE 提供互联网访问,我必须在笔记本电脑上应用以下规则:
iptables -t nat -A POSTROUTING -j SNAT --to-source <LAPTOP_IP>
它工作正常。
但是,我必须在不同的地方工作 - 办公室、家里、合作伙伴的办公室等。我的笔记本电脑的 IP 在这些地方是不同的,所以每次我改变地方时都必须改变上述规则。
我已经创建了一个解决方法,它基本上可以确定 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 地址”?
答案1
使用-j MASQUERADE
(取自CentOS 文档):
为了允许具有私有 IP 地址的 LAN 节点与外部公共网络进行通信,请配置防火墙进行 IP 伪装,即使用防火墙外部设备的 IP 地址屏蔽来自 LAN 节点的请求(在本例中为
eth0
):[root@myServer ~ ] # iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
此规则使用 NAT 数据包匹配表 ( ) 并指定防火墙外部网络设备 ( ) 上的NAT
-t nat
内置链 ( ) 。POSTROUTING
-A POSTROUTING
-o eth0
POSTROUTING
允许数据包在离开防火墙的外部设备时被改变。指定目标
-j MASQUERADE
是使用防火墙/网关的外部 IP 地址来屏蔽节点的私有 IP 地址。
它适用于没有静态 IP 地址的上行链路。