![如何通过具有公共 IP 的 Linux 代理 Windows TCP 端口(位于 NAT 下)?](https://linux22.com/image/1385441/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%E5%85%B7%E6%9C%89%E5%85%AC%E5%85%B1%20IP%20%E7%9A%84%20Linux%20%E4%BB%A3%E7%90%86%20Windows%20TCP%20%E7%AB%AF%E5%8F%A3%EF%BC%88%E4%BD%8D%E4%BA%8E%20NAT%20%E4%B8%8B%EF%BC%89%EF%BC%9F.png)
我有一台服务器(我是管理员),我可以通过 MSTSC.exe 从 NAT 下的 Windows 连接到该服务器。服务器在 NAT 下。我有使用公共 IP 的 Linux 服务器的 ssh 和 sudo 权限,可以打开 2k 及以上端口并安装软件。使用什么软件我可以通过 Linux 服务器转发我的 Windows 端口?
答案1
有几种方法可以做到这一点:
最快的方法(临时使用)是使用 ssh 客户端,如 putty。连接到 Linux 机器并添加隧道规则。
在 Linux 机器上执行此操作,您的目标是在 Linux 机器上启用 IP 转发,并添加防火墙规则,将流量从未使用的高端口重定向到您的 Windows RDP 端口(即 3389)。首选命令是 iptables。使用它,您可以将网络规则添加到 Linux 内核。建议在公共接口上使用高端口,以防止脚本小子扫描默认端口。
首先,启用 IP 转发(如果尚未启用):
暂时的:
sysctl -w net.ipv4.ip_forward=1
然后使用 iptables 添加防火墙规则:
假设:eth0 是内部网络,网络地址为 192.168.1.0/24,eth1 是外部网络,IP 地址为 1.2.3.4
sudo iptables -t nat -A PREROUTING -t nat -p tcp -d 1.2.3.4 --dport 3389 -j DNAT --to 192.168.16.1:3389
如果外部高端口为 12345,您可以定义此 iptables 规则
sudo iptables -t nat -A PREROUTING -t nat -p tcp -d 1.2.3.4 --dport 12345 -j DNAT --to 192.168.16.1:3389
要检查您的 NAT 规则,请使用以下命令:sudo iptables -L -nv -t nat
永久性:
sudo nano /etc/sysctl.conf
并添加以下行:
net.ipv4.ip_forward=1
使用以下命令重启 sysctl
sudo sysctl -p
要永久添加 iptables 规则,您可以在 Linux 机器上创建一个防火墙初始化脚本(如果尚未创建)并将其挂接到 Linux 机器已经运行的运行级别中。
您也可以谷歌搜索“Linux iptables NAT”、“端口转发”等。那里有很多文档 - 甚至针对 rdp。