在现在大部分都是Nginx转发的时候,有时候还是需要用到端口转发、IP转发,因为足够简单。
在CentOS7之前,做防火墙管理的是iptables,自然也是用其做端口转发,命令冗长,在CentOS7之后,引入了systemd取代之前的sysvinit,同时也引入了firewall-cmd取代之前的iptables,这篇文章就分别从这两套系统中如何做端口转发开始。

0. 需求

  • A地址: 10.1.1.100
  • A端口: 80
  • B地址: 10.1.1.200
  • B端口: 8080
    现在我们有两个需求:
  • 1.将A机器80转发至8080
  • 2.将A机器80转发至B机器8080

1.从Sysctl开始

本机下做端口转发,直接配置即可,但如果转发至其他服务器,则需要动态修改内核参数,主要是利用/etc/sysctl.conf,默认的net.ipv4.ip_forward为关闭,需要手动修改。

vi /etc/sysctl.d/ipv4.ip_forward.conf
net.ipv4.ip_forward=1

# 生效
sysctl -p

# 查看
sysctl -a | grep ipv4.ip_forward

以上是永久修改,重启网络或机器均不会失效,还有两种会失效的临时配置:

# 1
echo 1 > /proc/sys/net/ipv4/ip_forward

# 2
sysctl -w net.ipv4.ip_forward=1

2.CentOS7之前:iptables

2.1 本机转发
# 配置
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

# 保存
service iptables save

# 生效
service iptables restart
2.2 IP转发

IP转发需求动态修改内核参数。

# 配置
iptables -t nat -A PREROUTING -p tcp -d 10.1.1.100 --dport 80 -j DNAT --to-destination 10.1.1.200:8080

# 保存
service iptables save

# 生效
service iptables restart

3.CentOS7之后:firewall-cmd

3.1 本机转发
# 配置
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 --permanent

# 生效
firewall-cmd --reload
3.2 IP转发
# 配置
firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr:10.1.1.200:toport=8080 --permanent

# 生效
firewall-cmd --reload
Last modification:July 15th, 2019 at 04:20 pm