手机版

linux端口映射怎么设置(全是实操流程!)

时间:2024-08-08 14:45:06

1 为什么要做端口映射?

其实现在大多数公司都搭建了内网服务器环境,有时候我们的员工需要外网访问内部服务器的时候就有一道屏障了,那么这个时候就需要做端口映射,从而让内外网进行没有阻碍的数据传输。

下面我们来实操一下在WindowsLinux服务器中如何实现端口映射。


2 Windows 服务器环境下完成端口映射

  • 方案一

直接使用市面三方工具,例如花生壳等。

  • 方案二

查看端口映射情况,命令如下:

netsh interface portproxy show v4tov4

使用方式:
netsh interface portproxy show v4tov4 | find "ip"

使用示例:

netsh interface portproxy show v4tov4 | find "192.168.110.***"

增加一个端口映射,命令如下:

netsh interface portproxy add v4tov4 listenaddress=[外网IP地址] listenport=[外网端口] connectaddress=[内网IP地址] connectport=[内网端口]

使用示例:

netsh interface portproxy add v4tov4 listenaddress=5.5.5.5 listenport=8080 connectaddress=192.168.110.*** connectport=80

删除一个端口映射,命令如下:

netsh interface portproxy delete v4tov4 listenaddress=[外网IP] listenport=[外网端口]

使用示例:

netsh interface portproxy delete v4tov4 listenaddress=5.5.5.5 listenport=8080

3 Linux 服务器中环境下端口映射

首先设置服务器允许数据包转发,命令如下:

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.110.100/200 -o ens37 -j MASQUERADE

再设置端口映射,命令如下:

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

使用示例:

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8090 -j DNAT --to-destination 192.168.110.100:8090

然后来实际操作,把内外服务映射到外网:

提前准备好:VMWare(搭建虚拟机的平台)、5台Linux Centos7 服务器

从图中很明了了,server是外网和内网的分界点。

Server是双网卡主机,连接192.168.110.0/300和172.16.2.300/500两个。

Server3、Server4是两台内网服务器,Server1、Server2是两台外网服务器。

Server1服务器是我们的用户端。

Server3、Server4、Server2三台服务器搭建HTTP服务:

注意这里需要用到Python,不了解的可以查找一下资料。

cd ~
echo "server3" > index.html
python -m SimpleHTTPServer 8080
cd ~
echo "server4" > index.html
python -m SimpleHTTPServer 8080
cd ~
echo "server2" > index.html
python -m SimpleHTTPServer 8080

用户端Server1访问Server3和Server4的资源:

curl http://192.168.110.12:8080/index.html

curl http://192.168.110.13:8080/index.html

访问后给的错误提示:

用户端Server2访问的资源:

curl http://192.168.110.11:8080/index.html

访问后给的,访问成功的提示。

这里可以看出来,server1访问server2时,因他们本身处于同一个内网环境,一次访问成功。server1访问server3和server4时就出现了无法访问内网资源了。

到server服务上配置端口映射:

#允许数据包转发
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.110.0/24 -o ens37 -j MASQUERADE
#设置端口映射
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8081 -j DNAT --to-destination 192.168.110.12:8080
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8082 -j DNAT --to-destination 192.168.110.13:8080
注意这种配置方式是临时的,如果你重启了虚拟机或服务器就会失效的。
如果需要永久配置,则把上面的命令追加到/etc/rc.local文件中。

再用户端Server1访问Server3、Server4、Server2的资源:

curl http://192.168.110.12:8080/index.html
curl http://192.168.110.13:8080/index.html
curl http://192.168.110.11:8080/index.html

这样就反应全部访问成功了。

注意:

如果这里你都server服务是window服务,就哟啊用到前面window的配置方式了。

netsh interface portproxy add v4tov4 listenaddress=192.168.110.12 listenport=8081 connectaddress=192.168.110.10 connectport=8080
netsh interface portproxy add v4tov4 listenaddress=192.168.110.13 listenport=8082 connectaddress=192.168.110.11 connectport=8080
netsh interface portproxy show v4tov4