在 CentOS Linux 上做基于 NAT 的端口映射

我们假设公司内部网络有两台服务器:

  1. 服务器 A :配有外网 IP 地址 1.1.1.1 和内网 IP 地址 192.168.1.1 ,操作系统为 CentOS Linux 7 ;
  2. 数据库服务器 B :仅配有内网 IP 地址 192.168.1.2 ,操作系统没有限制,Windows 也可。

现在有一个需求,需要通过外网去访问数据库服务器 B 的 3306 端口,即将 1.1.1.1:30000 映射为 192.168.1.2:3306 。

虽然在路由器和交换机上做也可以,但这里讨论的是如何在 CentOS Linux 上做。

我们将在服务器 A 上进行如下配置:

1 、开启 IP 路由转发:

( 1 )临时开启(配置写入内存,立即生效,重启服务器后失效):

[root@host ~]# echo "1" > /proc/sys/net/ipv4/ip_forward

( 2 )永久开启(配置写入硬盘,执行命令 sysctl -p 后生效,同时重启服务器后还会生效):

[root@host ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
[root@host ~]# sysctl -p

( 3 )可使用下列命令查看是否开启:

[root@host ~]# sysctl -a | grep "ip_forward"
net.ipv4.ip_forward = 1
[root@host ~]#

2 、开启 NAPT :

[root@host ~]# iptables -t nat -F    # 清除原有的 NAT 表中的规则
[root@host ~]# iptables -F    # 清除原有的 filter 表中的规则
[root@host ~]# iptables -P FORWARD ACCEPT    # 缺省允许 IP 转发

[root@host ~]# iptables -t nat -A PREROUTING -p tcp --dport 30000 -j DNAT --to-destination 192.168.1.2:3306
[root@host ~]# iptables -t nat -A POSTROUTING -d 192.168.1.2 -p tcp --dport 3306 -j SNAT --to 192.168.1.1

上述倒数第二条命令是做 DNAT( destination NAT ,对目的 IP 地址做 NAT ),即将 x.x.x.x:yyyy → 1.1.1.1:30000 转换为 x.x.x.x:yyyy → 192.168.1.2:3306 。

上述倒数第一条命令是做 SNAT( source NAT ,对源 IP 地址做 NAT ),即再将 x.x.x.x:yyyy → 192.168.1.2:3306 转换为 192.168.1.1:zzzz → 192.168.1.2:3306 。

3 、如需查看现有 NAT 表中有哪些规则,请使用如下命令查看:

[root@host ~]# iptables -t nat -L

现在,通过外网去访问 1.1.1.1:30000 就相当于去访问 192.168.1.2:3306 。

 

参考自:

  • https://blog.csdn.net/zzhongcy/article/details/42738285

Was this article helpful?

Related Articles

Leave A Comment?

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据