Провозился сегодня полчаса с OpenVPN-ом. Мой мозг упорно отказывался понимать по какой причине не хотят подниматься тоннели. Сложность в том, что машинка "воткнута" сразу в трёх провайдеров (ненадежность каналов компенсируем их количеством, ога), соответственно, имеет несколько интерфейсов "в мир". То бишь является multihomed. Понятно, что при помощи iproute2 данная ситуация разруливается без особых проблем. Но вот OpenVPN ведет себя крайне загадочно. Когда он получает UDP-пакет на одном из интерфейсов, то ответ он посылает не с тем же самым IP-адресом, на который получил запрос, а с некоторого "дефолтного", к которому он успел заbind-иться первым. То есть принимает на один IP, а отправляет с другого.
Как выяснилось, это не баг, а фича. Лечится добавлением строчки "multihome" в конфиг. Но для меня изначальный замысел создателей OpenVPN-а как-то ну совсем ни разу не понятен. Я всегда думал, что единственно разумное поведение — "куда пришел, оттуда и ушел". Тот же bind9 как раз так себя и ведёт без каких-либо дополнительных настроек. Почему авторы OpenVPN решили по-другому и почему не включили в конфиг по-умолчанию этот самый "mutlihome", для меня, по-видимому, навсегда останется загадкой.