Vamos chamar eth0 a interface (IF) na qual pc1 está vinculada ao roteador, e eth1 o IF em qual pc1 está vinculado a pc2. Você precisa desses comandos, emitidos como sudo, no 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
Na máquina Windows, você terá que configurar um IP estático na faixa 192.168.27.0/24, por exemplo, 192.168.27.2, e definir 192.168.27.1 como seu gateway padrão.
Isso funciona em sistemas semelhantes ao Debian. Se você tiver outra distro, terá que adaptá-la às suas necessidades. Por exemplo, em Systemd-distros (Arch-Linux, Fedora, SuSE 19 ..), o primeiro comando é systemctl stop network-manager
).
O primeiro comando desativa o networkmanager, o que dificulta a maioria das operações personalizadas. Os 3 comandos a seguir conectam o pc1 ao seu roteador, e os outros comandos 5-6 conectam o pc1 ao pc2. Em seguida, os comandos 7-8 configuram a tabela de roteamento, os comandos 9-10 configuram o DNS, o comando 11 habilita o encaminhamento Ipv4 no kernel e os comandos 12-13 estabelecem regras para o iptables atuar como um encaminhador NAT e para aceitar conexões de pc2.
Isso pode ser facilmente roteirizado.
Se você quiser permitir a comunicação apenas em certas portas, substitua
iptables --append FORWARD --in-interface eth1 -j ACCEPT
com
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