[Linux]利用iptables实现端口转发(不同的主机,不同的端口示例)

2021-02-17 82点热度 0人点赞 0条评论

前言

有这么一个需求,需要把访问本机(192.168.1.1)的80端口的流量转发到局域网另一台服务器(192.168.1.2)的8080的端口上,如果是web服务,那么可以使用nginx进行反向代理把web流量用proxy_pass的方式转发到192.168.1.2上,我们将采用iptables的方式,可以将所有的tcp或者udp都转发到另一台机器上。

如果你的机器是CentOS7或者8,或者Ubuntu,默认没有安装iptables ,可以查看我的另一篇博文:

https://blog.terrynow.com/2021/02/16/centos7-ubuntu-iptables-firewall/

准备工作,检查linux的ip_forward配置

#修改/etc/sysctl.conf文件
vim /etc/sysctl.conf

#找到net.ipv4.ip_forward如果它的值是0就改成1,如果没有,就新增一行,输入以下内容
net.ipv4.ip_forward = 1#改成1

#修改保存后,使配置生效
sysctl -p /etc/sysctl.conf

准备工作2,检查是否有iptables

which iptables
#or
systemctl status iptables
#如果Unit iptables.service could not be found.说明没有安装,或者系统默认安装的不是iptables防火墙
#那么可以参考 https://blog.terrynow.com/2021/02/16/centos7-ubuntu-iptables-firewall/ 安装iptables防火墙
#清空NAT表
iptables -F -t nat

#将外网访问的80端口的tcp流量转发到192.168.1.2:8080端口
iptables -t nat -I PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.2:8080
iptables -t nat -I POSTROUTING -p tcp --dport 8080 -j MASQUERADE

#将本机的5900转发到192.168.1.2的5900,即两个端口一样的情况
iptables -t nat -I PREROUTING -p tcp --dport 5900 -j DNAT --to-destination 10.22.7.2:5900
iptables -t nat -I POSTROUTING -p tcp --dport 5900 -j MASQUERADE
如果CentOS要写到配置文件里,以便重启后生效
#80 forward到本机的8080,写到vim /etc/sysconfig/iptables 
#最后加上如下:

*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [3:353]
:POSTROUTING ACCEPT [3:353]
-A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
COMMIT
如果是Ubuntu,保存到配置文件
iptables-apply
iptables-save > /etc/network/iptables.up.rules

 

admin

这个人很懒,什么都没留下

文章评论

*

code