Я думаю, что это будет делать то, что вы хотите, предполагая, что сеть такая:
Интернет <----> Компьютер A <----> Компьютер B
Заметки:
<external interface>
- это интерфейс (например, eth0
, p1p1
и т. д.), который подключен к Интернету на компьютере A. <internal interface>
- это интерфейс на компьютере A, который подключен к компьютеру B.
Эти команды должны запускаться от имени пользователя root (в su -
) на компьютере A (с доступом к Интернету).
EXT=<external interface>
INT=<internal interface>
echo 1 > /proc/sys/net/ipv4/ip_forward #Tell the system it is OK to forward IP packets
iptables -t nat -A POSTROUTING -o $EXT -j MASQUERADE
iptables -A FORWARD -i $EXT -o $INT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i $INT -o $EXT -j ACCEPT
ip addr show $INT
В выходных данных команды ip addr
найдите строку, которая начинается с inet
(или inet6
если вы используете IPv6). Используйте IP-адрес в этой строке в следующей команде от имени пользователя root на компьютере B:
ip route add default via <put ComputerA's internal IP address here>
Теперь посмотрите, работает ли он, запустив ping google.com
на компьютере B или просто попытавшись загрузить веб-страницу в браузере.
Если вы хотите сохранить изменения на компьютере A, выполните эти команды от имени пользователя root:
apt-get install iptables-persistent
/etc/init.d/iptables-persistent save
Теперь я точно не знаю, как восстановить сохраненные правила при загрузке, кто-нибудь еще может что-то подсказать? Это должно работать для выполнения /etc/init.d/iptables-persistent reload
(как root) каждый раз после загрузки, но это будет проблемой.
Чтобы компьютер B всегда использовал компьютер A в качестве шлюза по умолчанию, потребовалось бы установить DHCP на компьютер A, о котором я не хочу говорить в этом ответе.