LINUX.ORG.RU
ФорумAdmin

StrongSwan как заставить слушать на одном ip адресе

 


0

1

Хочется странного. Как заставить strongswan слушать только на определенном ip а не на 0.0.0.0 ? У меня пока не получается нагуглить.
Прямо сейчас мне оно не надо, но вдруг понадобиться запустить два разных ipsec на дефолтных портах но с разными ip.

★★★★★
Ответ на: комментарий от Disova

Нет. Слушать он продолжает на 0.0.0.0, просто не будет работать на другом интерфейсе.

anc ★★★★★
() автор топика
Ответ на: комментарий от anc

Мы о том, что раз нельзя повесить харона слушать конкретный IP, то нужно плодить интерфейсы и развешивать экземпляры харонов по ним. И, поскольку каждый экземпляр харона будет слушать _все_ айпишники выданного ему интерфейса, то netstat (фи, нетстат в 2016 году!) и будет показывать 0.0.0.0.
Будет ли все это нормально работать с виртуальными интерфейсами в случае отсутствия физических - не знаю, не проверял.

thesis ★★★★★
()
Последнее исправление: thesis (всего исправлений: 2)
Ответ на: комментарий от Disova

anc, у вас systemd? Ключи charon.* относятся только конкретно к charon. Если вы используете systemd, то у вас, с большой вероятностью, charon-systemd, а не charon. Используйте:

charon-systemd.interfaces_use

ValdikSS ★★★★★
()
Ответ на: комментарий от thesis

И, поскольку каждый экземпляр харона будет слушать _все_ айпишники выданного ему интерфейса, то netstat (фи, нетстат в 2016 году!) и будет показывать 0.0.0.0.

Хм, однако обычно другие программы ведут себя по другому, если выдали конкретный интерфейс слушаем адреса на нем, один, два, три... неважно сколько адресов.

(фи, нетстат в 2016 году!)

Подскажите альтернативу?

anc ★★★★★
() автор топика
Ответ на: комментарий от ValdikSS

Нет, systemd не ем. Слака.

anc ★★★★★
() автор топика
Ответ на: комментарий от anc

cлушаем адреса на нем, один, два, три... неважно сколько

Я, к стыду своему, даже не знаю, умеет ли нетстат такое показывать. Мне казалось, он всегда рисует 0.0.0.0 в таком случае.

альтернутиву

Для данного случая - ss, конечно.

thesis ★★★★★
()
Ответ на: комментарий от Disova

Да, запамятовал за ненадобностью.

anc ★★★★★
() автор топика
Ответ на: комментарий от thesis

Я, к стыду своему, даже не знаю, умеет ли нетстат такое показывать. Мне казалось, он всегда рисует 0.0.0.0 в таком случае.

Он вроде как рисует то что забиндили при старте, если было написано 0.0.0.0 то оно и будет. Если bind вызывался для отдельных ip то будут отдельные строчки.

Для данного случая - ss, конечно.

Теже и в профиль.

anc ★★★★★
() автор топика
Ответ на: комментарий от anc

Я говорю о том, что если ты отдаешь демону целиком интерфейс, то не пофиг ли, слушает он на нем какой-то один адрес или все?
Если strongswan умеет цепляться на один интерфейс (для чего и придуманы упомянутые выше директивы), то задача «повесить нескольких харонов на разные айпишники» сводится к «развести айпишники по виртуальным интерфейсам, раздать каждому харону по интерфейсу и смотреть, взлетит ли».

Теже и в профиль.

В данном контексте - да. Зато модно!

thesis ★★★★★
()
Ответ на: комментарий от thesis

Я говорю о том, что если ты отдаешь демону целиком интерфейс, то не пофиг ли, слушает он на нем какой-то один адрес или все?

Вся фигня в том что у функции bind нет понятия интерфейс, есть адрес который или конкретный или все. Так вот харон занимает все, т.е. 0.0.0.0. Я уже попробовал забиндить адрес с другого интерфейса, был послан 'Address already in use'.

Если strongswan умеет цепляться на один интерфейс (для чего и придуманы упомянутые выше директивы), то задача «повесить нескольких харонов на разные айпишники» сводится к «развести айпишники по виртуальным интерфейсам, раздать каждому харону по интерфейсу и смотреть, взлетит ли».

Нет, он не умеет «цепляться на один интерфейс» он умеет отвечать только с указанных интерфейсов, так же как и с определенных ip если указаны в left, т.е. искусственное ограничение уже внутри него. А вот повесить еще кого нибудь на другие адреса уже не получиться.
Вообще какая-то странная ситуация, порт менять можем (что как раз может понадобиться куда как реже) а вот указать конкретный ip не можем. racоon вот нормально привязывается к ip.

anc ★★★★★
() автор топика
Последнее исправление: anc (всего исправлений: 1)
Ответ на: комментарий от Disova

btw навеяло, вам названия ОС подсказать где без netstat вы таблицу роутинга не посмотрите или сами догадаетесь?

anc ★★★★★
() автор топика
Ответ на: комментарий от anc

Вся фигня в том что у функции bind нет понятия интерфейс

А есть же опция сокета SO_BINDTODEVICE. Правда, уж не знаю досконально, как она работает и работает ли вообще. И использует ли ее стронгсван тоже не знаю. Т.е. если бы меня это интересовало, я вместо курить маны и сорцы по-быстрому попробовал бы запустить два экземпляра харона на одинаковых портахи КАК БЫ на разных интерфейсах. Я так понимаю, ты и сам это уже попробовал.
В общем, ты подробно и с удовольствием объяснил мне, почему ты не можешь решить свою (теоретическую пока) задачу. Ну не можешь и ладно, увы, бывает.

thesis ★★★★★
()
Ответ на: комментарий от thesis

А есть же опция сокета SO_BINDTODEVICE.

Это не то. С ней будет отправляться через указанный интерфейс, без учета таблицы роутинга. Это не тема харона, тем более у них там таких слов нет (точнее есть только в плагине dhcp и там как раз это нужно)

Т.е. если бы меня это интересовало, я вместо курить маны и сорцы по-быстрому попробовал бы запустить два экземпляра харона на одинаковых портахи КАК БЫ на разных интерфейсах. Я так понимаю, ты и сам это уже попробовал.

Ну почти это, несколько строк на C, попытка повеситься на «якобы не используемый» ip :)
ЗЫ Кстати раз уж речь зашла про SO_BINDTODEVICE. Попробовал с ним, итого:
Можно повесить на разные интерфейсы при этом в netstat будет несколько строк с 0.0.0.0.
После запуска хотя бы одного экземпляра, нельзя повеситься на конкретный ip без разницы на каком интерфейсе.
Пакеты прилетевшие не с указанного интерфейса не будут получены.
На tun не работает.
Предупреждение потомками: Это все не про харон, а тестовую поделку было.

anc ★★★★★
() автор топика
27 августа 2017 г.

Понекрофилизирую немножко.

На одном из проектов мы («мы, shimon I») решили эту проблему при помощи пространств имен (ip netns ...).

Мало того, что таким образом удалось запустить несколько харонов, так еще и раздать им разные конфиги (в strongswan, к сожалению, путь к конфигурационным файлам прописан жестко).

https://wiki.strongswan.org/projects/strongswan/wiki/Netns содержит подробности.

Возможно, вам надо будет делать какую-нибудь свою обертку до кучи, потому что работа с mount namespaces в ip netns exec реализована достаточно криво и однобоко.

Ну а вдруг кто-то искать будет.

shimon ★★★★★
()
Последнее исправление: shimon (всего исправлений: 1)
Ответ на: комментарий от shimon

Спасибо! Вполне в тему названия темы (тавтология),кому-то может пригодиться.

ЗЫ Уже позже этой темы я на упоминание реализации через netns натыкался, вполне возможно это был и ваш комментарий. А на тот момент мне чего-то мозгов попробовать через netns не хватило.
Хотя до сих пор в проде так и не понадобилось, но саму идею запомнил.

anc ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.