核心就是通过命令 netsh 实现端口重映射
注意netsh需要administrator权限运行
netsh interface portproxy add v4tov4 listenport=12345 listenaddress=0.0.0.0 connectport=3388 connectaddress=127.0.0.1
且要求随系统重启时自动运行
- 下载 nssm, 它可以把命令行包装为一个Service
- copy nssm to c:\
- enter nssm bin path
- input:
nssm install PortRedirectService
然后在弹出的对话框中做如下操作:
在“Path”中选择 netsh.exe。
在“Arguments”中输入你的 netsh 命令
具体的参数例如:
interface portproxy add v4tov4 listenport=12345 listenaddress=0.0.0.0 connectport=3388 connectaddress=127.0.0.1
这个命令就是让12345转向到3388
点击“Install service”完成安装。
接着可以运行服务
net start PortRedirectService
服务会在每次系统启动时自动运行。
但是要注意Windows防火墙会ban掉外部连接,
但是我不希望把nssm这个app设为except
相反我把端口12345设为except
具体操作如下:
进入 Windows 防火墙设置: 在控制面板中,选择 系统和安全,然后选择 Windows Defender 防火墙。
创建入站规则: 在左侧导航栏中,点击 高级设置。
创建新的入站规则: 在右侧窗口中,点击 入站规则,然后在右侧面板点击 新建规则。
配置规则属性: 在向导中选择 端口 选项,然后点击 下一步。
选择端口类型: 选择 特定本地端口,然后输入要打开的端口号(例如,12345)。
选择允许连接: 选择 允许连接,然后点击 下一步。
选择连接的配置: 可以选择 公共、专用 或 域,具体根据你的网络设置选择。
命名规则: 给规则起一个名称和可选的描述,然后点击 下一步。
完成向导: 检查配置,然后点击 完成。
此时外部就可以访问12345了
P.S 如何通过 netsh 枚举所有映射,以及删除映射
1.枚举映射
netsh interface portproxy show all
2.删除映射
举例:
netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=8080