3

Я новичок в iptables и уже несколько дней занимаюсь поиском в Google, не находя хорошего решения этой проблемы.

У меня есть компьютер A с публичным IP-адресом (скажем, 192.0.2.1), который может неограниченно выходить в Интернет. У меня есть другой компьютер B с частным IP-адресом (192.168.1.1), который может получить доступ только к компьютеру A. Как я могу использовать iptables для пересылки сетевого трафика из B через A в Интернет? Мне нужно использовать http, ftp и https для использования apt-get с sudo.

Оба компьютера работают под управлением Ubuntu Linux. Я пытался использовать Squid, но я думаю, что он слишком сложен для того, что мне нужно сделать.

5 ответов5

1

Я думаю, что это будет делать то, что вы хотите, предполагая, что сеть такая:
Интернет <----> Компьютер 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, о котором я не хочу говорить в этом ответе.

0

Теперь я точно не знаю, как восстановить сохраненные правила при загрузке, кто-нибудь еще может что-то подсказать? Это должно работать для выполнения /etc/init.d/iptables-persistent reload (как root) каждый раз после загрузки, но это будет проблемой.

просто добавьте изменения в /etc/rc.local или аналогичные

Чтобы компьютер B всегда использовал компьютер A в качестве шлюза по умолчанию, потребовалось бы установить DHCP на компьютер A, о котором я не хочу говорить в этом ответе.

Настройте адреса статически

0

Для работы в качестве шлюза между частными IP-адресами и общедоступными IP-адресами необходимо выполнить преобразование сетевых адресов (NAT). В Интернете есть множество учебных пособий о том, как использовать iptables для NAT, с iproute2 или без него (это еще один распространенный программный пакет Linux, который может выполнять NAT).

0

Я использовал squid для этого, это мощный сложный зверь, но Squid действительно для кеширования. Тогда вы будете использовать host1 в качестве кэширующего прокси-хоста, и хотя вы можете использовать его, он упускает суть. Я сделал то, что вы пытались сделать с IPTABLES (обратно сразу после ipchains!). IIRC потребовалось написать правило для пересылки входящего соответствующего пакета на другой маршрут. Здесь много информации (если выше ссылка не получила информацию enuf).

http://www.linuxtopia.org/Linux_Firewall_iptables/c951.html

Я не верю, что использование VPN - это действительно простое решение, но я упускаю суть того, что вы пытаетесь сделать, поэтому сначала сделайте это правильно. VPN хорош для шифрования трафика на другой хост.

-2

Попробуй это

http://www.debuntu.org/how-to-redirecting-network-traffic-to-a-new-ip-using-iptables/

Или используйте "простой" способ и используйте VPN.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .