2023-05-10
linux
00
请注意,本文编写于 506 天前,最后修改于 506 天前,其中某些信息可能已经过时。

目录

Linux或Windows上实现端口映射
实验:将部署在内网的服务映射到外网
实验环境
实验拓扑
配置实验环境
1. Server1,2,3 上搭建 HTTP 服务
对照实验
在Server4上配置端口映射
检查效果
如果Server4为 Windows,替换一下相应的命令即可

Linux或Windows上实现端口映射

一、Windows 下实现端口映射

1. 查询端口映射情况

shell
netsh interface portproxy show v4tov4

2. 查询某一个 IP 的所有端口映射情况

shell
netsh interface portproxy show v4tov4 | find "[IP]" 例: netsh interface portproxy show v4tov4 | find "192.168.1.1"

3. 增加一个端口映射

shell
netsh interface portproxy add v4tov4 listenaddress=[外网IP] listenport=[外网端口] connectaddress=[内网IP] connectport=[内网端口] 例: netsh interface portproxy add v4tov4 listenaddress=2.2.2.2 listenport=8080 connectaddress=192.168.1.50 connectport=80

4. 删除一个端口映射

shell
netsh interface portproxy delete v4tov4 listenaddress=[外网IP] listenport=[外网端口] 例: netsh interface portproxy delete v4tov4 listenaddress=2.2.2.2 listenport=8080

二、Linux 下端口映射

1. 允许数据包转发

shell
echo 1 >/proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -j MASQUERADE iptables -A FORWARD -i [内网网卡名称] -j ACCEPT iptables -t nat -A POSTROUTING -s [内网网段] -o [外网网卡名称] -j MASQUERADE 例: echo 1 >/proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -j MASQUERADE iptables -A FORWARD -i ens33 -j ACCEPT iptables -t nat -A POSTROUTING -s 192.168.50.0/24 -o ens37 -j MASQUERADE

2. 设置端口映射

shell
iptables -t nat -A PREROUTING -p tcp -m tcp --dport [外网端口] -j DNAT --to-destination [内网地址]:[内网端口] 例: iptables -t nat -A PREROUTING -p tcp -m tcp --dport 6080 -j DNAT --to-destination 10.0.0.100:6090

实验:将部署在内网的服务映射到外网

实验环境

  • VMWare Workstation Pro
  • 5 台最小化安装的 centos 7 虚拟机

实验拓扑

image.png 内网和外网是相对Server4来说的。

Server1和Server2为内网环境的两台服务器;

Server3为外网环境下的一台服务器;

Server4为一台双网卡主机,分别连接192.168.50.0/24和172.16.2.0/24两个网络。

配置实验环境

1. Server1,2,3 上搭建 HTTP 服务

用 Python 在Server1上搭建一个简单的 HTTP 服务

shell
cd ~ echo "server1" > index.html python -m SimpleHTTPServer 8080

image.png

Server2、Server3同理

对照实验

在client上访问Server1的资源

shell
curl http://192.168.50.11:8080/index.html

image.png

在client上访问Server2的资源

shell
curl http://192.168.50.12:8080/index.htm

image.png

在client上访问Server3的资源

shell
curl http://172.16.2.11:8080/index.html

image.png

可以看到,外网的client是无法访问内网Server1,Server2的资源的。

在Server4上配置端口映射

临时配置

shell
#允许数据包转发 echo 1 >/proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -j MASQUERADE iptables -A FORWARD -i ens33 -j ACCEPT iptables -t nat -A POSTROUTING -s 192.168.50.0/24 -o ens37 -j MASQUERADE #设置端口映射 iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8081 -j DNAT --to-destination 192.168.50.11:8080 iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8082 -j DNAT --to-destination 192.168.50.12:8080

永久配置

如果需要永久配置,则将以上命令追加到/etc/rc.local文件。

检查效果

在client上访问 Server1 的资源

shell
curl http://172.16.2.100:8081/index.html

在client上访问Server2的资源

shell
curl http://172.16.2.100:8082/index.html

image.png

在client上访问Server3的资源

shell
curl http://172.16.2.11:8080/index.html

image.png

如果Server4为 Windows,替换一下相应的命令即可

Windows 的 IP 信息如下

image.png

image.png

配置并查看端口映射情况

shell
netsh interface portproxy add v4tov4 listenaddress=172.16.2.105 listenport=8081 connectaddress=192.168.50.11 connectport=8080 netsh interface portproxy add v4tov4 listenaddress=172.16.2.105 listenport=8082 connectaddress=192.168.50.12 connectport=8080 netsh interface portproxy show v4tov4

检查效果

在client节点上

shell
curl http://172.16.2.105:8081/index.html curl http://172.16.2.105:8082/index.html curl http://172.16.2.11:8080/index.html

image.png

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:YOUWEI

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 ™ 许可协议。转载请注明出处!