LINUX.ORG.RU
ФорумAdmin

Потери пакетов внутри OpenVPN сети

 


0

2

Вводная такая: Есть большой OpenVPN сервер для объединения филиальных сетей. В какой-то момент начали наблюдаться потери пакетов в туннельной (только внутри) сети из любой точки в любую. Причем проблема затрагивала даже две ноды (OpenVPN-сервер и OpenVPN-client1), живущие в Европе в соседних ДЦ на быстрых и качественных каналах.

Путём чтения логов был выловлен клиент, который выбивает сам себя путём переподключения разных мест раз в минуту – это была легитимная нода, для которой сделан этот клиент, и админ этой ноды, который решил воспользоваться этим сертификатом с своего компа.

В client-config в настройках OpenVPN сервера для этого клиентского CN был прописан iroute с подсетью позади клиента.

Как только переподключения из разных мест были устранены – проблема с потерей пакетов сразу ушла. Теста ради включили дубль этого клиента снова и потери сразу проявились. Т.е. источник проблемы найден, но не понятна её причина.

Пытаюсь написать postmortem о проблеме и смутно помню, что читал где-то что-то в духе «добавление iroute в внутренние таблички openvpn ставит весь туннельный трафик на паузу».

Может кто-то из Лоровцев сможет навести на ответ на вопрос «Что это было?».

★★★

Можно не использовать вундервафельные возможности openvpn, строить каналы ptp tun или ptmp в режиме tap. А поверх этого обычный роутинг. Тогда iroute да и конфиг per-client будет не нужен.

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

Гм. Как бы тебе это объяснить, что других вариантов нет.

У тебя статический маршрут в сеть клиента привязан к CN и адрес клиента статический.

Тут подключается еще один абсолютно такой-же клиент.

Что делать с пакетами в сеть клиента? ovpn их отправляет по новому подключению (это логично). А там левая машина админа которая скорее всего даже не маршрутизатор!

А у тебя duplicate-cn включен? Если нет, то клиент1 делает переподключение и сбрасывает дубля, а тот так же через некоторое время делает переподключение и сбрасывает клиент1.

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

Ты похоже не понимаешь суть вопроса, ну или я криво её рассказываю.

Есть топология звезды. Один центральный сервер и пачка клиентов. У всех клиентов позади них живет собственная сеть(и). Один из кончиков звезды (client0 172.16.231.0/24) начал флаппать из-за дублирующегося подключения (duplicate-cn выключен, да). Я прекрасно понимаю, что в этом сегменте сети в таком режиме ничего нормально работать не будет. Смиримся с потерей сети 172.16.231.0/24 и примем как факт, что для client0 роутинг в его сеть работать не должен (частично).

Непонятный для меня момент в том, что ВСЕ остальные клиенты этого VPN-сервера при общении друг с другом начали испытывать потери внутри туннельной сети. Т.е. client1 шел пингами внутрь сети позади client2 и в процессе наблюдались потери 20-30%. То же самое было между client3 и client4 и т.п.

При этом ноды, на которых установлены client1, 2, 3, 4 и сам VPN-сервер пинговали друг друга по их публичным адресам без единого потерянного пакета. Client1 и VPN-сервер это вообще сервера сидящие в соседних машинных залах одного большого хостера, между ними вообще никогда нет потерь пакетов и задержки 2-3 ms. Однако внутри тоннеля между ними так же наблюдались потери 20-30%.

Как только флаппинг одного из клиентских подключений убираем – потери в VPN-каналах других клиентов падают до нуля.

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

Непонятный для меня момент в том, что ВСЕ остальные клиенты этого VPN-сервера при общении друг с другом начали испытывать потери внутри туннельной сети. Т.е. client1 шел пингами внутрь сети позади client2 и в процессе наблюдались потери 20-30%. То же самое было между client3 и client4 и т.п.

Ах вот оно что. Очень странный эффект.

А при этом cpu не перегружен на ovpn-сервере?

От версии ovpn не зависит?

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

CPU в норме, сервером выступает pfsense 2.6.0, т.е. OpenVPN 2.5.4. Клиентами выступаю такие же pfsense или windows/linux клиенты 2.5.2 - 2.5.8.

Зависимости от версий не выявил, клиенты начинают терять пакеты все сразу.

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

Это явно проблема сервера, а не клиентов.

Реализация tun/tap должна сильно зависить от ОС. pfsense это же оффтопик! :)

Вот уж интересно, а на онтопике оно так же работает?

Интересно, есть ли разница на tcp и udp?

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

Pfsense это фряха с налётом проприетарности.

На будущее планирую такие тесты на бою:

  • флапающий клиент с дублем CN без iroute в своём конфиге
  • флапающий клиент без дубля CN, но просто часто переподключающийся c iroute
  • флапающий клиент без дубля CN, но просто часто переподключающийся без iroute

Может быть сможет навести на мысли о причинах этого поведения.

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

Плагинов в использовании нет, но есть пара sh-портянок, которые завязаны на события подключения клиента.
https://gist.github.com/neskorodev/edeeb370f95c4be87e18843665f32e64
https://gist.github.com/neskorodev/fe7dd56c991407657531b8d85dfc4b78

dev ovpns2
verb 1
dev-type tun
dev-node /dev/tun2
writepid /var/run/openvpn_server2.pid
script-security 3
daemon
keepalive 10 60
ping-timer-rem
persist-tun
persist-key
proto udp4
auth SHA256
up /usr/local/sbin/ovpn-linkup
down /usr/local/sbin/ovpn-linkdown
client-connect /usr/local/sbin/openvpn.attributes.sh
client-disconnect /usr/local/sbin/openvpn.attributes.sh
learn-address "/usr/local/sbin/openvpn.learn-address.sh my.domain"
local ...
tls-server
server 10.10.4.0 255.255.254.0
client-config-dir /var/etc/openvpn/server2/csc
lport 1194
management /var/etc/openvpn/server2/sock unix
client-to-client
remote-cert-tls client
capath /var/etc/openvpn/server2/ca
cert /var/etc/openvpn/server2/cert
key /var/etc/openvpn/server2/key
dh /etc/dh-parameters.2048
data-ciphers AES-128-CBC
data-ciphers-fallback AES-128-CBC
allow-compression asym
compress lzo
push "compress lzo"
persist-remote-ip
float
topology subnet
server 10.10.4.0 255.255.254.0 'nopool'
ifconfig-pool 10.10.5.71 10.10.5.170
...
BOOBLIK ★★★
() автор топика
Ответ на: комментарий от BOOBLIK

Если скрипты не написаны особым образом (в асинхронном стиле, см. документацию OpenVPN), то их исполнение останавливает всю обработку трафика, пока они не выполнятся. OpenVPN однопоточный.

По вашим ссылкам не вижу, чтобы они были написаны особым образом. К тому же, там есть sleep’ы и прочее. Полагаю, они блокируют трафик.

ValdikSS ★★★★★
()
Последнее исправление: ValdikSS (всего исправлений: 2)