Рейтинг:0

Сквозной VPN-туннель с iptables

флаг ng

Мой почтовый VPS достигает своего предела, но его выделенный IP-адрес хорошо взращен, и я просто не могу с ним расстаться. Я пытаюсь настроить тестовую среду, в которой я устанавливаю VPN-сервер на VPS только для передачи входящего и исходящего трафика обратно на виртуальную машину с целью использования внешнего IP-адреса на VPS для всех интернет-коммуникаций при туннелировании этого трафика обратно на ВМ. Мои проблемы с iptables. Я не могу понять это, и я уверен, что это просто недостаток знаний об использовании iptables в такой степени. И мой VPS, и виртуальная машина работают под управлением Debian 10.

Я пробовал несколько разных вариантов правил, которые я нашел в разных сообщениях здесь.

Вариант (я изменил имя адаптера и порты при использовании этих правил)

iptables -A FORWARD -m conntrack --ctstate NEW -s $PRIVATE_SUBNET -m policy --pol none --dir in -j ACCEPT
iptables -t nat -A POSTROUTING -s $PRIVATE_SUBNET -m policy --pol none --dir out -j MASQUERADE
iptables -A INPUT -p udp --dport $SERVER_PORT -j ПРИНЯТЬ
iptables -A FORWARD -i eth0 -o wg0 -p tcp --syn --dport 80 -m conntrack --ctstate NEW -j ПРИНЯТЬ
iptables -A FORWARD -i eth0 -o wg0 -m conntrack --ctstate УСТАНОВЛЕНО, СВЯЗАННО -j ПРИНЯТЬ
iptables -A FORWARD -i wg0 -o eth0 -m conntrack --ctstate УСТАНОВЛЕНО, СВЯЗАННО -j ПРИНЯТЬ
iptables -A FORWARD -i eth0 -o wg0 -p tcp --syn --dport 443 -m conntrack --ctstate NEW -j ПРИНЯТЬ
iptables -A FORWARD -i eth0 -o wg0 -m conntrack --ctstate УСТАНОВЛЕНО, СВЯЗАННО -j ПРИНЯТЬ
iptables -A FORWARD -i wg0 -o eth0 -m conntrack --ctstate УСТАНОВЛЕНО, СВЯЗАННО -j ПРИНЯТЬ
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination $WIREGUARD_CLIENT_ADDRESS
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j DNAT --to-destination $WIREGUARD_CLIENT_ADDRESS

Я также пытался написать свои собственные правила, но даже после просмотра нескольких отличных обучающих видео, которые охватывают больше, чем просто таблицу фильтров. У меня, кажется, нет правильной ментальной картины того, как потоки трафика.

Кроме того, поскольку я хочу получать НОВЫЙ трафик с VPN-сервера, я знаю, что мне нужно внести изменения в iptables на «клиентской» виртуальной машине, и это вполне может быть и моей проблемой. Я надеялся, что кто-нибудь сможет пролить свет на несколько основных концепций, которые мне могут не хватать для решения этой головоломки.

Рейтинг:0
флаг cn

Если я правильно помню, "поток" для входящего пакета будет таким:

схема перезаписей заголовка

Я проверил это на нескольких экземплярах EC2: одном общедоступном и одном частном. Оба работают с apache с простой веб-страницей, одна говорит «шлюз», а другая — «узел».

Перед добавлением правил IP-таблиц я могу свернуть простую веб-страницу, и она правильно показывает, что это из моего экземпляра «шлюза». Затем я делаю следующее на шлюзе:

эхо 'net.ipv4.ip_forward = 1' | sudo тройник /etc/sysctl.d/10-forwarding.conf
sudo sysctl -w net.ipv4.ip_forward=1

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --назначение 10.0.100.154
sudo iptables -A FORWARD -i eth0 -p tcp --dport 80 -j ПРИНЯТЬ
sudo iptables -t nat -A POSTROUTING -p tcp --dport 80 -j SNAT --to 10.0.0.160

Это позволяет мне сворачивать общедоступный IP-адрес, где он передается через NAT на целевую внутреннюю виртуальную машину и правильно перенаправляется/передается через NAT для ответа. Я настроил частную подсеть без какой-либо внешней маршрутизации, поэтому, если она не маршрутизируется во внутренний диапазон, она никуда не денется. Он работает так, как ожидалось!

Если у вас несколько интерфейсов, вы должны иметь возможность заблокировать ВПЕРЕД правило немного лучше с дополнениями -i eth0 -o WG0 некоторым правилам и РАЗМЕЩЕНИЕ правило с -о WG0.

Поэтому я думаю, что ваши правила должны быть такими:

#Â dnat для целевой виртуальной машины VPN
iptables -t nat -A PREROUTING -i eth0 -p tcp -m multiport --dports 80 443 -j DNAT --назначение $WIREGUARD_CLIENT_ADDRESS

# переадресация между интерфейсами для новых подключений
iptables -A FORWARD -i eth0 -o wg0 -p tcp -m multiport --dports 80 443 -m conntrack --ctstate NEW -j ПРИНЯТЬ
# Разрешить пересылку связанного трафика - нет необходимости в обоих наборах -i/-o, так как мы можем просто разрешить связанный
iptables -A FORWARD -m состояние ESTABLISHED, RELATED -j ACCEPT

# Постмаршрутизация для VPN
iptables -t nat -A POSTROUTING -o wg0 -p tcp -m multiport --dports 80 443 -j MASQUERADE
флаг ng
Именно то, что я искал! Сработало как волшебство, и объяснение поможет мне разобраться в подобных ситуациях в будущем. Благодарю вас!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.