Давайте назовем 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