Рейтинг:0

iptables / LXD - Mangle iptable - Направить исходящий удаленный порт (на удаленный серверный порт 21) через eth0

флаг ru

Подводя итог контексту, это контейнер 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.

Кто-нибудь может мне помочь.

A.B avatar
флаг cl
A.B
Это не удается, потому что стек маршрутизации выбрал исходный IP-адрес до того, как iptables смог установить отметку для перенаправления: исходный IP-адрес не изменился. Обычно для этого существует более элегантный метод: `ip rule add ... ipproto tcp dport 21 ...`. Но поскольку это FTP и использует канал данных * не * на порту 21, я ожидаю, что позже он выйдет из строя при передаче файлов (или просто перечислении каталога), поэтому я не буду давать ответ. См. этот вопрос/ответ на UL SE, где я использую этот метод: https://unix.stackexchange.com/questions/581419/routing-port-traffic-over-specific-interface.
n.karlen avatar
флаг ru
Спасибо @AB, это отвечает на мой вопрос, потому что меня интересует в основном техническая проблема, а не обязательно конкретный порт / протокол. Я не знал об этих новых правилах ip, это намного логичнее и практичнее, чем использование iptables.

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

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