Задать вопрос
@Apasnychel

Проблема с пробросом порта из локальной сети опен впн?

Ребят, такой вот вопрос.
Схема у меня такая.
Есть ПК. На нём дебиан. На дебиан опен впн клиент.
Есть впс.
На нём опен впн серв.

++++++++++++серв конфиг++++++++
port 1194
proto tcp-server
dev tap
mode server
tls-server
ca /root/easyrsa/pki/ca.crt
cert /root/easyrsa/pki/issued/server.crt
key /root/easyrsa/pki/private/server.key
dh /root/easyrsa/pki/dh.pem
client-to-client
keepalive 10 120
persist-key
persist-tun
verb 3
++++++++++++++++++++++++++++++

+++++++++++клиент конфиг+++++++
client
dev tap
proto tcp-client
remote 1194
tls-client
ca ca.crt
cert client1.crt
key client1.key
persist-key
persist-tun
verb 3
+++++++++++++++++++

И в общем поселе того как я все подключил я делаю на ПК вот что:
import os
os.system("ip link add name br0 type bridge")
os.system("ip link set dev enp9s0 down")
os.system("ip link set dev tap0 down")
os.system("ip link set dev enp9s0 master br0")
os.system("ip link set dev tap0 master br0")
os.system("ip link set dev enp9s0 up")
os.system("ip link set dev tap0 up")
os.system("ip link set dev br0 up")
os.system("ip addr add 10.10.0.2/24 dev br0")
В Ethernet порт ПК воткнут кабель , а другой конец в LAN роутера asus wl 500 g premium.
Кабель в роутер я втыкаю только после того как выполнил скрипт бриджа. На роутер есть dhcp сервер. И он даёт шлюз 10.10.0.1

Что я делаю на впс.
После того как я подключил роутер.

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 10.10.0.0/24 -o ens3 -j MASQUERADE
iptables -A FORWARD -i tap0 -o ens3 -j ACCEPT
iptables -A FORWARD -i ens3 -o tap0 -m state --state RELATED,ESTABLISHED -j ACCEPT
Таким образом я делаю впс шлюзом, (10.10.0.1)

И если я хочу про бросить какой нибудь порт на ens 3 впс, от устройства в локальной сети опен впн я делаю вот что. Пишу на впс это:
iptables -t nat -A PREROUTING -i ens3 -p udp --dport 19123 -j DNAT --to-destination 10.10.0.7:19123
iptables -A FORWARD -p udp -d 10.10.0.7 --dport 19123 -j ACCEPT
И это работает. Но, только не для компа на котором дебиан. Причем, что странно, такое ощущение, что ответы от сервера не могут дойти до клиента. Почему?. Если я подклбчусь через ротер или через другое устройство клиентом опен впн, я спокойно могу общатся с портом который на ПК с дебиан. С других устройств пробрасывается все прекрасно.
  • Вопрос задан
  • 297 просмотров
Подписаться 1 Простой 3 комментария
Помогут разобраться в теме Все курсы
  • Нетология
    1C-программист: расширенный курс
    18 месяцев
    Далее
  • Академия Эдюсон
    Python-разработчик + ИИ
    9 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Инженер по информационной безопасности
    9 месяцев
    Далее
Решения вопроса 1
opium
@opium
Просто люблю качественно работать
Классика asymmetric routing. Пакет летит в Debian через tap0, а ответ уходит через enp9s0 к физическому роутеру — VPS его не видит и MASQUERADE для ответа не срабатывает. Другие девайсы в LAN работают потому что весь их трафик идёт и возвращается через роутер, VPS их форвардит по L2 прозрачно.

Фикс: дай VPS-у IP на tap0 (ip addr add 10.10.0.254/24 dev tap0), потом:
iptables -t nat -A POSTROUTING -o tap0 -d 10.10.0.2 -j MASQUERADE

Тогда пакет придёт к Debian с src=10.10.0.254, он ответит обратно в тунель по ARP записи VPS-овского tap мака, и всё заработает.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы