@m2_viktor

Как одновременно поднять 2 openvpn туннеля (udp)?

Здравствуйте, на virtualbox есть два openvpn сервера и клиент( все debian8), которые используют протокол udp. Клиент одновременно подключается к обоим серверам, при подключении ко второму, появляется ошибка:
TCP/UDP: Socket bind failed on local address [undef]: Address already in use

Инглиш немного знаю, "сокет не может забиндится на локальный адрес: адрес уже используется.

netstat -u на клиенте выдает пустоту.

С tcp все ок:
tcp 0 0 client.lan:51801 ovpn2.lan:10883 ESTABLISHED
tcp 0 0 client.lan:49416 ovpn1.lan:10882 ESTABLISHED

Я немного знаю теорию по соектам в контексте именно слушающего сокета:
Cлушающий tcp сокет, при установлении с ним соединения, создает копию себя и уже с копией устанавливается соединение, слушающий udp-сокет просто принимает дейтаграмму без установления соединения, на один сокет, от любого количества клиентов. И я думаю это както связанно с моей ситуацией.

Помогите разобраться.
  • Вопрос задан
  • 3531 просмотр
Решения вопроса 1
@AlexeySetevoi
Тут механика какая, поведение по умолчанию текущей версии openvpn различается для tcp и udp.
Для tcp соединений с клиента openvpn по-умолчанию автоматом выбирает незанятый непривилегированный порт на машине-клиенте и использует его в соединении с сервером, поэтому получается нормально, те как-то так:
tcp        0      0 client:46788            ovpn1:10882             ESTABLISHED 2320/openvpn    
tcp        0      0 client:38172            ovpn2:10882             ESTABLISHED 2322/openvpn

Для udp openvpn с вашими конфигами не будет выбирать порт автоматом на клиенте - а попытается повесить процесс на локальный порт 1194. Первый успевший сделать коннект клиент нормально свяжется с сервером и займет 1194. Второй и последующие клиенты с такими конфигами будут пытаться занять 1194 - и получат отлуп - что и наблюдается в ошибке.
Быстрые варианты это обойти - либо прописать в конфиге клиента локальный занимаемый порт статически те добавить по опции в каждый клиентский конфиг:
lport 44455 - первому клиенту
lport 44456 - второму клиенту

либо, указать опцию
nobind в каждом конфиге, в этом случае назначение локальных портов openvpn будет делать аналогично tcp автоматом.

Вообще - задача выбора локального незанятого порта автоматом принципиально для tcp и udp не отличается bind() или connect() смотря где - поэтому такое поведение, на мой взгляд - это личное поведение openvpn продиктованное соображениями его сообщества, без какой-то обязательной привязки к теории.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@paxlo
В конфиге клиента убрать строчку
port такойто

Строчку remote привести к виду
remote ip-впн-cервера порт udp (или tcp что у тебя там)

Добавить строчку
nobind

ЧТобы получилось в итоге:
remote 192.168.192.10 1194 udp
nobind
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы