Добрый день! Ситуация такова:
Есть 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, но это опять же преположения.