如何让电脑在某些端口上充当路由器

如何让电脑在某些端口上充当路由器

我的实验室中有一台 Linux 服务器(以下称为 pc1),还有一台 Windows pc2,上面运行着一个游戏服务器。但由于这是一个私有网络,互联网可以访问的唯一一台电脑是 pc1。但我希望 pc2 上的游戏服务器可以被外部互联网看到。但我没有访问我们实验室路由器的权限。所以我想让 pc1 充当某种路由器,将 pc1:port1 转发到 pc2:port2 并向后转发。然后来自外部互联网的请求可以访问 pc2:port2,而来自 pc2 的回复也可以到达外部。有什么方法可以实现这一点吗?

答案1

我们将 eth0 称为 pc1 连接到路由器的接口 (IF),将 eth1 称为 pc1 连接到 pc2 的接口。您需要在 pc1 上以 sudo 形式发出以下命令:

 service network-manager stop
 ifconfig eth0 down
 ifconfig eth0 up
 dhclient eth0
 ifconfig eth1 down
 ifconfig eth1 192.168.27.1 up
 route add default gw The_IP_Addres_of_Your_Router
 route add -net 192.168.27.0/24 dev eth1
 echo nameserver 8.8.8.8 >> /etc/resolv.conf
 echo nameserver 8.8.4.4 >> /etc/resolv.conf
 echo 1 >/proc/sys/net/ipv4/ip_forward
 iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
 iptables --append FORWARD --in-interface eth1 -j ACCEPT

在 Windows 机器上,您必须在 192.168.27.0/24 范围内配置一个静态 IP,例如 192.168.27.2,并将 192.168.27.1 设置为默认网关。

这适用于类似 Debian 的系统。如果您有其他发行版,则必须根据自己的需求进行调整。例如,在 Systemd-distros(Arch-Linux、Fedora、SuSE 19..)上,第一个命令是systemctl stop network-manager)。

第一个命令禁用网络管理器,这会阻碍大多数自定义操作。接下来的 3 个命令将 pc1 连接到路由器,后面的命令 5-6 将 pc1 连接到 pc2。然后命令 7-8 设置路由表,命令 9-10 设置 DNS,命令 11 启用内核 Ipv4 转发,命令 12-13 设置 iptables 规则以充当 NAT 转发器并接受来自 pc2 的连接。

这可以轻松编写脚本。

如果您只想允许在某些端口上进行通信,请替换

  iptables --append FORWARD --in-interface eth1 -j ACCEPT

 iptables --append FORWARD --in-interface eth1  -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
 iptables --append FORWARD --in-interface eth1 -p Protocol_To_Be_Allowed --sport Port_To_Be_Forwarded -j ACCEPT
 iptables --append FORWARD --in-interface eth1 -j DROP

相关内容