Рейтинг:0

Пытаетесь перенаправить SMTP-порт в туннельном док-контейнере strongswan IPsec?

флаг za

Я успешно настроил vpn-туннель с сильный лебедь внутри док-контейнера и хотите использовать это туннелированное соединение для переадресации определенных портов, таких как SMTP, на хост на другой стороне туннеля, в моем случае хост 10.0.0.10.

Цель состоит в том, чтобы иметь возможность использовать SMTP в моем приложении напрямую, подключившись к Strongswan-контейнер обслуживание посередине вот так

(smtp-host)-[IPSec-tunnel]-(strongswan-container [открывает порт 25 и перенаправляет все на туннелированный smtp-host])-[some-docker-network]-(my-mail-sending-app-container [ вызывает strongswan-container:25 для smtp])

после прочтения некоторых документов об этом я попробовал эти iptables команды на Strongswan-контейнер но безуспешно:

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 MASQUERADE

на контейнер приложения для отправки моей почты я пытался бежать

Telnet Strongswan-контейнер 25

но он просто будет ждать ответа до истечения времени ожидания.

В чем проблема с моим iptables команда?

iptables-сохранить вывод после того, как strongswan подключился к туннелю:

root@14d43f1e2f55:/# iptables-сохранить
# Сгенерировано iptables-save v1.8.4, четверг, 22 июля, 16:25:04 2021
*фильтр
:ВВОД ПРИНЯТ [1:112]
:ВПЕРЕД ПРИНЯТЬ [0:0]
: ВЫВОД ПРИНЯТ [1:112]
-A INPUT -s 10.0.0.0/16 -d 192.168.112.2/32 -i eth0 -m policy --dir in --poli ipsec --reqid 1 --proto esp -j ПРИНЯТЬ
-A ВЫВОД -s 192.168.112.2/32 -d 10.0.0.0/16 -o eth0 -m policy --dir out --poli ipsec --reqid 1 --proto esp -j ПРИНЯТЬ
СОВЕРШИТЬ
# Завершено в четверг, 22 июля, 16:25:04 2021
# Сгенерировано iptables-save v1.8.4, четверг, 22 июля, 16:25:04 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:46701
-A DOCKER_OUTPUT -d 127.0.0.11/32 -p udp -m udp --dport 53 -j DNAT --назначение 127.0.0.11:58024
-A DOCKER_POSTROUTING -s 127.0.0.11/32 -p tcp -m tcp --sport 46701 -j SNAT --к источнику: 53
-A DOCKER_POSTROUTING -s 127.0.0.11/32 -p udp -m udp --sport 58024 -j SNAT --к источнику: 53
СОВЕРШИТЬ
# Завершено в четверг, 22 июля, 16:25:04 2021

мой ipsec.conf:

настройка конфигурации
     строгая политика = нет
     уникальные идентификаторы = нет

# левое по умолчанию является локальным, в противном случае левое и правое определяются динамически
подключение% по умолчанию

соединение "ezvpn"
    обмен ключами=ikev2
    агрессивный=да
    ike=(some-ciphers) # параметры Phase1
    esp=(some-ciphers) # параметры Phase2
    left=192.168.112.2 # локальный IP-адрес, используемый для подключения к IOS
    leftid=12.123.123.1 # IKEID (имя группы), используемый для IOS
    левый брандмауэр = да
    leftauth=psk
    правоаутент = psk
    фрагментация=да
    right=12.123.123.2 #шлюз (IOS) IP
    правая подсеть = 10.0.0.0/16
    правый брандмауэр = да
    авто=маршрут
    тип=туннель
    ikelifetime=180м
    ключевой жизни=60м
флаг cn
Можете ли вы на самом деле получить доступ к хосту SMTP (`10.0.0.10`) из контейнера strongSwan? Открывает ли контейнер порт 25 (через `EXPOSE` или `--expose`) или, может быть, даже публикует его?
флаг za
@ecdsa да для обоих, проблема не связана с докером, просто упомянула об этом из-за дополнительных настроек iptables
Рейтинг:0
флаг za

Я решил это, установив траефик в мой сильный лебедь контейнер, а затем с помощью TCP-маршрутизация возможности траефик для внутреннего доступа к туннелируемому порту.

Докерфайл (Я полностью осознаю, что этого можно добиться, используя альпийский также):

ИЗ убунту


RUN apt update && apt-get install -yf wget iputils-ping telnet strongswan iptables \
    && ln -sf /conf/ipsec.conf /etc/ipsec.conf \
    && ln -sf /conf/ipsec.secrets /etc/ipsec.secrets \
    && эхо "net.ipv4.ip_forward=1" >> /etc/sysctl.conf \
    && 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


КОПИРОВАТЬ docker-entrypoint.sh /entrypoint.sh
КОПИРОВАТЬ /strongswan/conf
КОПИРОВАТЬ /traefik-conf /traefik-conf

CMD ["/entrypoint.sh"]

Мой точка входа.sh:

#!/бин/ш -е

{
    # подождите, чтобы убедиться, что ipsec запущен при подъеме по туннелю
    спать 2
    ipsec вверх ezvpn
    traefik --configfile /traefik-conf/traefik.yml
} &

запуск exec ipsec --nofork "$@"

traefik-conf/traefik.yml:

# https://doc.traefik.io/traefik/routing/entrypoints/
Точки входа:
  смтп:
    address: ":1025" # порт, который прослушивает сеть докеров

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

провайдеры:
  файл:
    каталог: /traefik-conf/dynamic/
    # Я использую динамические конфигурации для локальной разработки
    смотреть: правда

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

/traefik-conf/dynamic/dynamic.yml:

TCP:
  # https://doc.traefik.io/traefik/routing/routers/#rule_1
  маршрутизаторы:
    smtp-маршрутизатор:
      правило: "HostSNI(`*`)"
      Точки входа:
        - смтп
      сервис: smtp-сервис

  # https://doc.traefik.io/traefik/routing/routers/#services
  Сервисы:
    smtp-сервис:
      loadBalancer:
        серверы:
          - адрес: 10.0.0.1:25 # замените на ваш целевой IP-адрес и сервисный порт

Видеть здесь для полного примера.

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

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