Подводя итог контексту, это контейнер lxd, который всегда подключается как клиент OpenVpn.
{слабый} <-> {192.168.x.x <-> iptables <-> хост моста lxd 10.0.3.1} <-> {lxd-контейнер 10.0.3.3 | опенвпн <-> iptables}
В контейнере есть
- eth0 (ip 10.0.3.3), который является клиентским интерфейсом на мосту lxd.
- tun0, который подключается как клиент к серверу OpenVpn
Хост lxd (10.0.3.1) перенаправляет трафик 10.0.3.3 во внешнюю сеть, iptables всегда принимает исходящие соединения.
Хост и клиент lxd имеют iptables.
Я уже выполнил маршрутизацию на 10.0.3.3, но для входящего порта (например, входящий http-порт на 10.0.3.3 и ответы на eth0, а не на tun0).
Итак, у меня есть таблица маршрутизации "novpn" с номером fwmark.
Моя проблема сейчас в том, что я пытаюсь сделать обратное. Исходящие запросы, идущие на порт 21 на любом удаленном сервере, должны проходить через eth0 (таблица «novpn»).
Я следил за несколькими сообщениями в stackoverflow и интегрировал это в iptables клиента 10.0.3.3. Я чувствую, что это просто:
IP-правило добавить таблицу fwmark 66 novpn
ip route добавить по умолчанию через 10.0.3.1 dev eth0 novpn table
iptables -t mangle -A PREROUTING -p tcp --dport 21 -j MARK --set-mark 66
iptables -t mangle -A ВЫВОД -p tcp --dport 21 -j MARK --set-mark 66
На iptables 10.0.3.1 у меня есть правило, которое принимает переадресацию с уже установленных и известных соединений. Так что бридж должен следовать, и я не думаю, что какие-то другие правила необходимы?
Но это не работает, когда я смотрю tcpdump на хосте (10.0.3.1), я вижу, что пакеты отправляются с IP-адресом openvpn, а не 10.0.3.3. Также похоже проблема с контрольной суммой отправляемых пакетов -> cksum 0x1983 (неправильно -> 0xe8ec).
Любопытно, когда я делаю tcpdump на консоли lxd-клиента (10.0.3.3), tcpdump ничего не отображает и там я уже ничего не понимаю.
Интересно, имеет ли lxd приоритет (может быть, что-то вроде прокси-устройств и т. д.) над iptables (и tcpdump??), но мне это кажется очень странным.
Если это может быть полезно, у меня есть правило "ip rule add to xxx.xxx.xxx.xxx table novpn". Так вот любое подключение к этому айпи идет через eth0 и, это действительно так, там запрос правильный в tcpdump.
Кто-нибудь может мне помочь.