Linux 和 Win10 上实现端口映射

通常服务器会有许多块网卡,因此也可能会连接到不同的网络,在隔离的网络中,某些服务可能会需要进行通信,此时服务器经过配置就可以承担起了转发数据包的功能。

一、Linux下实现端口映射

1. 允许数据包转发

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. 设置端口映射

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

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

实验环境

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

实验拓扑

内网外网是相对Server4来说的。
Server1Server2为内网环境的两台服务器;
Server3为外网环境下的一台服务器;
Server4为一台双网卡主机,分别连接192.168.50.0/24172.16.2.0/24两个网络。

配置实验环境

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

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

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

Server2Server3同理

对照实验

client上访问Server1的资源

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

client上访问Server2的资源

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

client上访问Server3的资源

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

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

Server4上配置端口映射

临时配置

#允许数据包转发
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

# 显示已有规则
iptables -t nat -L -n --line-number

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

检查效果

client上访问Server1的资源

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

client上访问Server2的资源

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

client上访问Server3的资源

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


二、Windows下实现端口映射

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

Windows的IP信息如下

网卡IP地址子网掩码默认网关备注
Ethernet0192.168.50.105255.255.255.0-内网网卡
Ethernet1172.16.2.105255.255.255.0-外网网卡

配置并查看端口映射情况

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节点上

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

1. 查询端口映射情况

netsh interface portproxy show v4tov4

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

netsh interface portproxy show v4tov4 | find "[IP]"

例:

netsh interface portproxy show v4tov4 | find "192.168.1.1"

3. 增加一个端口映射

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. 删除一个端口映射

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

例:

netsh interface portproxy delete v4tov4 listenaddress=2.2.2.2 listenport=8080

端口映射是一种技术,它允许一台机器同时拥有多个服务,并通过特定的端口号对外提供。这通常是通过网络设备如路由器、交换机等硬件设备或者是防火墙软件来完成的。 命令行测试通常是指通过终端(命令提示符或控制台窗口)输入命令来验证功能是否按预期工作的一种操作方式。下面是如何在Windows命令提示符下和Linux/Mac终端中对端口映射进行测试的步骤: ### Windows CMD 1. **打开命令提示符**:按下 `Win + R` 键,输入 `cmd` 并回车。 2. **使用 `ping` 命令**:首先尝试 ping 对应的远程服务器或应用程序的 IP 地址来确认其可达性。例如,如果你想检查位于公网的服务器,则可以输入:`ping <IP地址>`。 示例:如果 IP 地址为 `8.8.8.8` (Google DNS),则输入 `ping 8.8.8.8` 3. **使用 `telnet` 或 `nc` 进行连接测试**:为了进一步确定端口是否被正确映射并开放,你可以使用 `telnet` 或者现代版本中更推荐使用的 `nc` 命令。 - 使用 `telnet`:输入 `telnet <目标IP> <端口号>`,然后按 Enter。如果端口未被映射或关闭,将收到错误信息;若成功连接,则会显示一些信息。 示例:`telnet 192.168.1.100 80` (假设这个 IP 的端口 80 已经映射) - 使用 `nc`:更简单地执行 `nc -zv <目标IP> <端口号>` 来尝试连接。 示例:`nc -zv 192.168.1.100 80` 4. **查看本地监听的端口**:在某些情况下,你可能需要查看本机上哪些端口正在监听。可以在命令行中使用 `netstat -ano`(Windows)或 `ss -tuln`(Linux/Mac)命令来进行查看。 ### Linux/ macOS 终端 1. **打开终端**:在 MacOS 上,点击屏幕左上角的苹果菜单 > 打开实用工具 > 终端。对于 Linux 用户,大多数桌面环境都有预装的终端应用。 2. **ping 测试**:与 Windows 类似,使用 `ping <IP地址>` 命令来确认网络连通性。 3. **使用 `telnet`**:同样使用 `telnet <目标IP> <端口号>` 来尝试建立连接。如果端口已被正确映射并开放,则应该能成功连接。 示例:`telnet 192.168.1.100 80` 4. **使用 `nc`**:通过运行 `nc -zv <目标IP> <端口号>` 来快速检查端口状态。 5. **查看本地端口**:使用 `netstat -tanp` 或 `ss -tulnp` 命令来列出所有活动的网络连接及所监听的端口。 ### 相关问题: 1. 如何在命令行中确定端口是否已被正确映射到外部网络? 2. 当在局域网内进行端口映射时,如何从互联网访问该映射的端口? 3. 配置端口映射失败的原因有哪些?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

戴国进

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值