Skip to content

使用 Iptables 进行伪装进行网络地址转换(NAT)

网络地址转换 (NAT) 是一种允许多个设备共享单个公共 IP 地址的技术。 NAT 通常用于家庭和办公网络,允许专用网络上的设备通过单个公共 IP 地址访问互联网。

另一方面,顾名思义,伪装是将您的身份隐藏在面具或其他假定身份后面。就像这样,在计算机网络领域,一种类型的网络地址转换称为伪装,它通过将设备的 IP 地址替换为路由器或网关设备的 IP 地址来隐藏专用网络上设备的身份。

当专用网络上的设备想要与互联网上的设备通信时,它会向专用网络上的网关设备发送数据包,然后网关设备将数据包转发到互联网。但是,数据包的源 IP 地址是设备的私有 IP 地址,在互联网上无效。为了解决这个问题,网关设备将数据包的源IP地址替换为自己的公共IP地址,以便互联网上的设备将数据包视为来自网关设备,而不是来自私有设备。

修改内核参数,支持ipv4转发

vi /etc/sysctl.conf
# 增加下面一条参数
net.ipv4.ip_forward = 1
# 保存,使修改的内核参数在重启后也生效
sysctl -p

使用 Iptables 实施伪装

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

此命令向 NAT 表的 POSTROUTING 链添加一条规则,该规则匹配所有通过 eth0 接口的传出数据包,并将其源 IP 地址替换为 eth0 接口的 IP 地址。

  • -t 选项用于指定我们要使用的表,在本例中为 NAT 表。

  • -A 选项用于向链添加新规则。

  • -s 后跟接口的 IP 地址来指定要伪装的特定接口。

  • -o 选项用于指定数据包所经过的出接口。

  • -j 选项用于指定规则的目标,在本例中为 MASQUERADE,这意味着数据包的源 IP 地址应该被伪装。

添加此规则后,任何通过 eth0 接口的传出数据包的源 IP 地址都会伪装成 eth0 接口的 IP 地址。

保存

利用iptables-save命令可以将iptable规则保存到一个持久化存储的目录中,不同的系统保存的目录也有所不同:

Debian/Ubuntu: iptables-save > /etc/iptables/rules.v4

RHEL/CentOS: iptables-save > /etc/sysconfig/iptables

保存之后,可以通过iptables-restore命令载入:

Debian/Ubuntu: iptables-restore < /etc/iptables/rules.v4

RHEL/CentOS: iptables-restore < /etc/sysconfig/iptables

注意: 这种方式只是保存规则和恢复的一种方式,并不是说保存规则后下次启动就会自动加载。一定要记住这点,如果要想系统启动后自动加载请看下面的方式。

iptables-persistent (Debian/Ubuntu)

从 Ubuntu 10.04 LTS (Lucid) 和 Debian 6.0 (Squeeze) 版本开始,可以通过安装一个名为 “iptables-persistent” 的包,安装后它以守护进程的方式来运行,系统重启后可以自动将保存的内容加载到iptables中。当然前提也是需要先保存规则。

apt-get install iptables-persistent

RHEL 和 CentOS 保存规则

RHEL/CentOS 提供了简单的方式来持久化存储iptables规则,可以直接通过iptables服务的命令来完成。必须执行service iptables save 命令才会保存,保存后系统重启后会自动加载。