Как заставить компьютер выступать в качестве маршрутизатора на каком-либо порту

0

У меня есть сервер linux в моей лаборатории (в дальнейшем называемый pc1), и у меня есть windows pc2, на котором запущен игровой сервер. Но поскольку это частная сеть, и единственный компьютер, к которому есть доступ в Интернет, - это компьютер pc1. Но я хочу, чтобы игровой сервер на pc2 был виден за пределами интернета. Но у меня нет прав доступа к роутеру нашей лаборатории. Поэтому я хочу, чтобы pc1 действовал как своего рода маршрутизатор, который пересылает pc1: port1 на pc2: port2 и обратно. И тогда запрос из внешнего интернета может получить доступ к pc2: port2, а ответ от pc2 также может достичь внешнего. Есть ли способ добиться этого?

Толстый кот
источник
1
Если вы не можете получить доступ к фактическому маршрутизатору, как вы получите его для пересылки с маршрутизатора: порт1 на компьютер1: порт1?
Пол

Ответы:

1

Давайте назовем eth0 интерфейсом (IF), на котором pc1 связан с маршрутизатором, а eth1 - IF, на котором pc1 связан с pc2. Вам нужны эти команды, выданные как sudo, на pc1:

 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 вам необходимо настроить статический IP-адрес в диапазоне 192.168.27.0/24, например, 192.168.27.2, и установить 192.168.27.1 в качестве шлюза по умолчанию.

Это работает на Debian-подобных системах. Если у вас есть другой дистрибутив, вам придется адаптировать его к вашим потребностям. Например, в Systemd-дистрибутивах (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 и принимающих соединения от рс2.

Это может быть легко написано.

Если вы хотите разрешить связь только на определенных портах, замените

  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
MariusMatutiae
источник