Рейтинг:0

Зеркалируйте входящий трафик на определенный порт на другой IP-адрес, используя мой туннель IPSec strongswan.

флаг za

Я хочу внутренне опубликовать SMTP-сервер (IP 10.0.0.10), который находится за туннелем VPN на моем внутреннем сервере (192.168.0.12), используя сильный лебедь. Мой сильный лебедь работает в док-контейнере.

Для этого мне нужен мой внутренний сервер 192.168.0.12 слушать его 25 порт и перенаправлять трафик на туннелируемый сервер на тот же порт 10.0.0.10:25.

До сих пор я пытался использовать iptables, но безуспешно.

net.ipv4.ip_forward включен как на хосте, так и на док-контейнере!

мой iptables-сохранить на 192.168.0.12 после подключения strongswan к туннелю: (и да, я могу пропинговать 10.0.0.10 с 192.168.0.12)

# Сгенерировано iptables-save v1.8.4, пятница, 23 июля, 09:55:05 2021
*фильтр
:ВВОД ПРИНЯТЬ [0:0]
:ВПЕРЕД ПРИНЯТЬ [0:0]
: ВЫВОД ПРИНЯТЬ [0:0]
-A INPUT -s 10.0.0.0/16 -d 192.168.0.10/32 -i eth0 -m policy --dir in --pol ipsec --reqid 1 --proto esp -j ПРИНЯТЬ
-A ВЫВОД -s 192.168.0.10/32 -d 10.0.0.0/16 -o eth0 -m policy --dir out --poli ipsec --reqid 1 --proto esp -j ПРИНЯТЬ
СОВЕРШИТЬ
# Завершено пт, 23 июля, 09:55:05 2021
# Сгенерировано iptables-save v1.8.4, пятница, 23 июля, 09:55:05 2021
*натуральный
: ПРЕДВАРИТЕЛЬНОЕ ПРИНЯТИЕ [0:0]
:ВВОД ПРИНЯТЬ [0:0]
: ВЫВОД ПРИНЯТ [2:1600]
:ОТПРАВКА ПРИНЯТИЯ [2:1600]
:DOCKER_OUTPUT — [0:0]
:DOCKER_POSTROUTING - [0:0]
-A ВЫВОД -d 127.0.0.11/32 -j DOCKER_OUTPUT
-A ОТПРАВКА -d 127.0.0.11/32 -j DOCKER_POSTROUTING
-A DOCKER_OUTPUT -d 127.0.0.11/32 -p tcp -m tcp --dport 53 -j DNAT --назначение 127.0.0.11:45165
-A DOCKER_OUTPUT -d 127.0.0.11/32 -p udp -m udp --dport 53 -j DNAT --назначение 127.0.0.11:53306
-A DOCKER_POSTROUTING -s 127.0.0.11/32 -p tcp -m tcp --sport 45165 -j SNAT --к источнику: 53
-A DOCKER_POSTROUTING -s 127.0.0.11/32 -p udp -m udp --sport 53306 -j SNAT --к источнику: 53
СОВЕРШИТЬ

команда ip р вывод:

по умолчанию через 192.168.16.1 dev eth0
192.168.16.0/20 dev eth0 proto kernel scope link src 192.168.16.10 # это внутренняя сеть докера для моих сервисов
192.168.0.10/30 dev eth1 ссылка на область ядра proto src 192.168.0.12

Я пробовал различные команды, подобные этим:

iptables -t nat -A PREROUTING -p tcp --dport 25 -j DNAT --к месту назначения 10.0.0.10:25
iptables -t nat -A POSTROUTING -p tcp -d 10.0.0.10 --dport 25 -j SNAT --to-source 192.168.0.12

но безуспешно.

Я не могу предоставить информацию о ip р хозяина, ни iptables-сохранить.

Что я делаю не так?

Tom Yan avatar
флаг in
Предоставьте вывод следующих команд *как на хосте контейнера, так и на контейнере*: `ip r` (и, возможно, также `ip a`), `iptables-save` и `sysctl net.ipv4.ip_forward`.
флаг za
@TomYan добавил всю информацию, которую я смог собрать, я ограничен на хост-компьютере. Мне удалось спросить у хоста, включена ли IP-переадресация, и она включена.
Tom Yan avatar
флаг in
Я не понимаю. У вас нет контроля над «мой внутренний сервер (192.168.0.10)»? Или это другой контейнер? (Работает параллельно с Strongswan, то есть `192.168.0.12`?)
Tom Yan avatar
флаг in
Кроме того, вывод `ip r` также кажется выключенным.«192.168.0.12» даже не является действительным адресом хоста с «/30» (поскольку это будет идентификатор подсети).
флаг za
@TomYan спасибо за вашу помощь, я обновил IP-адреса, так что теперь они правильные. У меня нет контроля над хостом, на котором запущен док-контейнер. Я контролирую только сам докер-контейнер 192.168.0.12. Я уверен, что проблема не в хосте, а в конфигурации iptables внутри док-контейнера.
Tom Yan avatar
флаг in
Проблема в том, для кого/каких хостов сервер/контейнер будет обслуживать/пересылать? И как был настроен этот адрес на этом eth1? DHCP? Статический? (Вы?) Как я уже сказал, вывод `ip r` на самом деле не имеет смысла. Это вообще "настоящая" паста? (Или это что-то вроде «запишите/впечатайте»?) И эта «внутренняя сеть докера» (`eth0`) не имеет отношения к вашей цели/клиентам здесь?
Tom Yan avatar
флаг in
Кроме того, если этот сервер/экспедитор здесь является тем же контейнером, что и Strongswan, то где вообще маршрут к туннелю? Вы настроили политику маршрутизации или что?
флаг cn
Как вы это проверяете? Подключившись к порту 25 хоста? Или из другого контейнера? В любом случае, действительно ли эти пакеты попадают в контейнер и попадают под правила NAT?
флаг za
@ecdsa Я проверяю это с помощью `telnet 10.0.0.10 25` в `контейнере strongswan`, и цель состоит в том, чтобы `telnet strongswan 25`, предполагая, что имя контейнера `strongswan`
Рейтинг:0
флаг za

Я решил свою проблему, используя траефик.

Установил траефик на хост(192.168.0.12), который имеет туннель сильного лебедя и использовал TCP-маршрутизатор для перенаправления всего трафика в туннель.

траефик установка:

wget -O /traefik.tar.gz https://github.com/traefik/traefik/releases/download/v2.4.12/traefik_v2.4.12_linux_amd64.tar.gz \
    && tar -zxvf /traefik.tar.gz \
    && ln -s /traefik /usr/bin/traefik

traefik.yaml:

Точки входа:
  смтп:
    адрес: ":1025"

журнал доступа: {}

провайдеры:
  файл:
    каталог: /traefik-conf/dynamic/
    смотреть: правда

API:
  приборная панель: правда
  небезопасно: правда

мой /traefik-conf/dynamic/dynamic.yaml:

TCP:
  маршрутизаторы:
    smtp-маршрутизатор:
      правило: "HostSNI(`*`)"
      Точки входа:
        - смтп
      сервис: smtp-сервис

  Сервисы:
    smtp-сервис:
      loadBalancer:
        серверы:
          - адрес: 10.0.0.10:25

Бег траефик (Я не знаю, как правильно запустить его в качестве фонового демона):

traefik --configfile /traefik-conf/traefik.yml &

Теперь я могу подключиться к туннельному smtp-сервер отовсюду в моей сети, используя 192.168.0.12:1025.

Я создал пример, используя докер здесь на гитхабе

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

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