Linux中通过iptables实现端口转发

发布于:2017年12月14日    浏览:4320 次    属于:服务器运维 > 环境配置 原创作者:张晓栋

 

本文用于记录在Linux中通过设置Iptables实现端口转发,采用Ubuntu系统,Iptables可以实现多种三层网络协议的转发,本次主要用于记录tcp udp gre 三种转发


首先安装iptables

sudo apt-get install iptables


开启系统内核转发功能

vim /etc/sysctl.conf

删除 #net.ipv4.ip_forward=1 前的#号,开启ipv4 forward
sudo sysctl –p 若运行后显示 net.ipv4.ip_forward = 1,表示修改生效了


开启系统nat模块

iptables -t nat -A POSTROUTING -j MASQUERADE


到这一步我们就可以开始设置 tcp与udp的转发了,如下示例:

将对127.0.0.1的53端口的TCP与UDP访问转发到对应的119.29.29.29:53端口(127.0.0.1在这里只是一个示例,实际操作中建议修改为网卡的IP)

iptables -t nat -A PREROUTING -d 127.0.0.1 -p tcp --dport 53 -j DNAT --to-destination 119.29.29.29:53

iptables -t nat -A PREROUTING -d 127.0.0.1 -p tcp --dport 53 -j DNAT --to-destination 119.29.29.29:53


接下来我们进行GRE协议的转发,GRE协议一般用在PPTP的VPN中,GRE是与TCP UDP一样的平级协议,处于网络中的第三层

首先加载 ip_nat_pptp,命令如下

modprobe ip_nat_pptp

卸载这个模块的命令为  modprobe -r ip_nat_pptp


然后就可以进行GRE协议端口的转发了,PPTP使用的是GRE 47端口,执行如下命令:

iptables -t nat -I PREROUTING -p 47 -j DNAT --to 119.28.82.203


如果想要查看当前 iptables中的nat规则可以使用如下命令:

iptables  -t  nat  -nL


iptables的规则默认重启就失效了所以需要保存在配置文件中,然后再网卡中加载,方法如下:

sudo iptables-save > /etc/iptables-rules

vim /etc/network/interfaces
找到 eth0 那一节,在对 eth0 的设置最末尾加上下面这句:
pre-up iptables-restore < /etc/iptables-rules

这样当系统重启后则会自动加载我们设置好的转发规则


同样的 ip_nat_pptp 这个模块我们也需要配置开机自动加载,/etc/modules 这个文件用于设置在系统启动时自动加载的模块,系统在启动时会按照行数依次加载

vim /etc/modules

添加一行,输入 ip_nat_pptp 保存退出即可。