Iptebales提供的功能中其中一个是NAT网络地址转换,网络地址转换使用的场景通常是一个公网IP情况下供内网中多台主机连接外网,但是在极少数情况下会用在一台主机内网络流量重定向,比如将在本机回环设备中的数据包强行转发到另一台主机上。结果发现原本在正常的NAT场景中生效的iptables规则在loopback数据包的转发中并不起作用,原因是如果想要转发lo设备中的网络流量需要修改一个内核参数route_localnet值为1,该参数位于:
#echo 1 > /proc/sys/net/ipv4/conf/<NET_DEV>/route_localnet
该参数指定一个网络设备是否允许转发目的或源地址为127/8的数据包,也就是来自或去往lo设备的数据包,通常情况下Linux系统中的每个网络设备都有自己的参数配置。
Note:内核参数的修改是立即生效的但是重启后丢失。
接下来就可以按照正常的NAT一样来定义Iptables规则,以转发连接自己的SSH数据包到一台外部主机为例:
1.首先匹配到127.0.0.1:22套接字地址的数据包,将其目的地址强行修改为一个外部主机:
#iptables -t nat -A OUTPU