LINUX.ORG.RU
решено ФорумAdmin

Доступ к демону внутри OpenVPN

 , , ,


0

2

Добрый день! Ситуация такова: Есть network namespace. Внешний интерфейс veth0, внутренний veth1. Выхлоп ifconfig veth0 (из основной системы):

veth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.10.0.1  netmask 255.255.255.0  broadcast 10.10.0.255
ifconfig veth1 (из namespace):
veth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.10.0.2  netmask 255.255.255.0  broadcast 10.10.0.255
В этой ситуации, если добавить default route, всё работает как должно. То есть, все демоны, запущенные внутри имеют доступ в интернет и доступные из основной системы. Но задача в том, что в неймспейсе должен работать OpenVPN клиент, в который должен перенаправляться весь траффик с неймспэйса, при чем демоны всё так же должны быть доступны из системы.

Тут начинаются проблемы. Как известно, openVPN добавляет дефолтный роут, направляющий все пакеты в туннель. При этом, доступ из системы пропадает. Я убрал эту опцию из конфига VPN, и теперь роутинг в неймспэйсе таков:

10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.2
10.10.0.0/24 dev veth1 proto kernel scope link src 10.10.0.2
vpn_server_ip via 10.10.0.1 dev veth1
Запись >vpn_server_ip via 10.10.0.1 dev veth1 добавлена, чтобы VPN мог установить соединение с сервером, и на данный момент я могу пропинговать только его. Таким образом, нужно (как я понимаю) добавить 2 роута: 1 - Для всех пакетов, уходящих на внешние ip, указав в качетсве интерфейса tun0. 2 - Для всех пакетов, предназначенных для локалки - уходят в 10.10.0.2 (veth1) - основную систему.

Но вот как это реализовать, я не понимаю. Возможно, помимо этого надо писать правила для фильтрации пакетов в iptables, но это опять же преположения.

Ответ на: комментарий от anonymous

Это не совсем то, мне нужно иметь доступ к демону и из локалки тоже, а VPN закрывает доступ извне через default route, будь это контейнер или нет.

Nightfall ()

добавить 2 роута: 1 - Для всех пакетов, уходящих на внешние ip, указав в качетсве интерфейса tun0. 2 - Для всех пакетов, предназначенных для локалки - уходят в 10.10.0.2 (veth1) - основную систему.

ну на вид здраво. а что именно не выходит? ты форвард на veth0 не забыл включить?

VPN закрывает доступ извне через default route

дефолт вроде как последним обрабатывается в таблице (маска самая широкая). просто оставь те правила что есть, вцепи правило для всей локалки, а дефолт оставь на тоннеле

upcFrost ★★★★★ ()
Последнее исправление: upcFrost (всего исправлений: 1)
Ответ на: комментарий от upcFrost

Не выходит то, что я не очень знаком с роутингом, а документации я не нашел вообще. В archwiki есть статья про iptables но не роутинг, а «компьютерные сети» полезного тоже мало содержат. Вот и идея есть, а как реализовать - понятия не имею. Форвардинг включен, сам то по себе пинг идёт.

Nightfall ()
Ответ на: комментарий от Nightfall

а что там такое крутится внутри, что нужен доступ. Может нужно порт пробросить на хост из неймспейса? Он забиндится на хосте и можно будет туда стучать)

anonymous ()
Ответ на: комментарий от anonymous

Там прокси. Не уверен, что можно. openVPN добавляет роут «default via 10.8.0.2 dev tun0», и как бы мы не настраивали форвардинг, все пакеты должны идти через tun0. Поэтому у меня и была мысль созда два роута, но как должн выглядеть роут «все, кроме 10.10.0.0/24 via 10.8.0.2 dev tun0» я пока не понимаю.

Nightfall ()

Так, всё, с роутами разобрался. Добавил

route add default gw 10.8.0.1

через него идёт всё, и добавил (точнее, он добавлятся вместе с интерфейсом)

ip route add 10.10.0.0/24 via 10.10.0.2 dev veth1

через него пакеты идут в локалку. Осталось только добавить форвардинг, чтобы из локалки, которая находится на интерфейсе wlan0 по адресу 10.0.0.1 можно было зайти на 10.10.0.2 Почему-то

-A FORWARD -d 10.0.0.0/24 -i veth0 -j ACCEPT
-A PREROUTING -s 10.0.0.0/24 -d 10.10.0.1/24 -p tcp -m tcp --dport 9000 -j REDIRECT --to-ports 9000
-A POSTROUTING -s 10.0.0.0/24 -o veth0 -j MASQUERADE

не работает. Точнее не совсем работает. Пинг идёт и до 10.0.0.1 и до 10.0.0.2, но вот telnet молчит и не может найти проксю. Так же, изменение в iptables veth0 на veth1 ничего не даёт, кроме того, что пинг перестёт идти до veth1. Пытался привязать проксю к 10.0.0.1, но ничего не получается.

Nightfall ()

Всё, проблему форвардинга тоже решил. Костылями правда, через portfwd, но всё же.

Nightfall ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.