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

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

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

相关内容