LINUX.ORG.RU
ФорумAdmin

Сломался OpenVPN после обновления

 


0

2

Есть сервер на ArchLinux на базе CubieBoard2. На нём стоит сервер OpenVPN. Всё работало хорошо, а потом я обновился. Теперь клиент успешно подключается к серверу, но пакеты не ходят (скажем, пытаюсь попинговать внутренний IP сервера - 10.8.0.1 - не пингуется, внешний интернет тем более).

Таблица маршрутов до подключения к VPN:

$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         localhost       0.0.0.0         UG    600    0        0 wlan0
192.168.43.0    *               255.255.255.0   U     600    0        0 wlan0

Таблица маршрутов после подключения к VPN:

$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         localhost       0.0.0.0         UG    50     0        0 tun0
default         localhost       0.0.0.0         UG    600    0        0 wlan0
10.8.0.0        localhost       255.255.255.0   UG    50     0        0 tun0
localhost       *               255.255.255.255 UH    0      0        0 tun0
localhost       *               255.255.255.255 UH    50     0        0 tun0
192.168.43.0    *               255.255.255.0   U     600    0        0 wlan0
X.X.X.X  localhost       255.255.255.255 UGH   600    0        0 wlan0

Здесь X.X.X.X - публичный IP сервера.

В логах на сервере в момент подключения клиента:

Dec 14 08:05:10 suigintou-0 openvpn@server[197]: 188.162.251.3:6299 Control Channel: TLSv1.2, cipher TLSv1/SSLv3 DHE-RSA-AES256-GCM-SHA384, 2048 bit RSA                
Dec 14 08:05:10 suigintou-0 openvpn@server[197]: 188.162.251.3:6299 [unia] Peer Connection Initiated with [AF_INET]188.162.251.3:6299
Dec 14 08:05:10 suigintou-0 openvpn@server[197]: unia/188.162.251.3:6299 MULTI_sva: pool returned IPv4=10.8.0.6, IPv6=(Not enabled)
Dec 14 08:05:10 suigintou-0 openvpn@server[197]: unia/188.162.251.3:6299 MULTI: Learn: 10.8.0.6 -> unia/188.162.251.3:6299
Dec 14 08:05:10 suigintou-0 openvpn@server[197]: unia/188.162.251.3:6299 MULTI: primary virtual IP for unia/188.162.251.3:6299: 10.8.0.6
Dec 14 08:05:14 suigintou-0 openvpn@server[197]: unia/188.162.251.3:6299 PUSH: Received control message: 'PUSH_REQUEST'
Dec 14 08:05:14 suigintou-0 openvpn@server[197]: unia/188.162.251.3:6299 send_push_reply(): safe_cap=940
Dec 14 08:05:14 suigintou-0 openvpn@server[197]: unia/188.162.251.3:6299 SENT CONTROL [unia]: 'PUSH_REPLY,redirect-gateway def1 bypass-dhcp,dhcp-option DNS 10.8.0.1,route 10.8.0.0 255.255.255.0,topology net30,ping 10,ping-restart 120,ifconfig 10.8.0.6 10.8.0.5' (status=1)

188.162.251.3 - публичный IP клиента (это динамический IP мобильной сети, а все её клиенты сидят за NAT, так что не вижу смысла его не палить).

Конфиг OpenVPN: http://pastebin.com/LL8z6xPC

ifconfig на сервере:

# ifconfig tun0
tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1500
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 100  (UNSPEC)
        RX packets 797  bytes 50784 (49.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

А это нормально, что у tun0 нет IP адреса? Я не помню был ли он раньше, но вообще IP сервера внутри OpenVPN - 10.8.0.1.

★★★★★

Всё работало хорошо, а потом я обновился.

Кто обновился? Вы, сервер или клиент?

А это нормально, что у tun0 нет IP адреса?

Это странно. И если на сервере ″ip addr″ не показывает 10.8.0.1, то не понятно, как пинги должны работать. А на клиенте на tun-интерфейс адреса назначены?

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

Обновился сервер.

Да, на сервере ip addr не показывает 10.8.0.1. А на клиенте отображается правильный IP 10.8.0.6. А пинги и не работают. И вообще ничего не работает внутри VPN. Кстати, на выводе ifconfig на стороне сервера можно увидеть, что сервер получал пакеты, но сам ни одного не отправлял.

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

Если выполнить на сервере команду ifconfig tun0 10.8.0.1/24, то всё начинает работать. Но ведь раньше демон OpenVPN сам всё настраивал, как его заставить снова это делать?

KivApple ★★★★★
() автор топика

Либо откатить обновление, либо изучать лог инициализации сервера и разбираться, почему не полностью отрабатывает опция server.
Возможно, потребуется увеличить уровень логирования.
Как вариант, можно разделить опцию server на составляющие (см. man openvpn) и явно определить опцию ifconfig.

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

Лог инициализации сервера: http://pastebin.com/aUmbfzAe

Что интересно, если вручную выполнить команду /usr/bin/ip addr add dev tun0 10.8.0.1/24 broadcast 10.8.0.255 из лога, то она успешно выполняется и всё начинает работать (точно также как помогает задать адрес с помощью ifconfig).

Не может ли быть такого, что сервер OpenVPN стартует слишком рано, до инициализации сети, а последующая инициализация сбрасывает настройки?

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

Вот она «польза» системд. :) А если серьезно, попробуйте сервер стартануть вручную уже после загрузки и посмотрите будет ли такой же эффект.

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

увеличить уровень логирования

Пробовали?

Не может ли быть такого, что сервер OpenVPN стартует слишком рано, до инициализации сети, а последующая инициализация сбрасывает настройки?

Если интерфейс не успевает инициализироваться/подняться, в ответ на команды ip link/addr должны выдаваться конкретные сообщения об ошибках.
Возможно они оседают куда-то в другое место, типа dmesg.

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

Да, всё именно так и происходит. Перезапускаю сервер после загрузки - всё начинает работать. Проблема именно с автозапуском сервера.

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

Я предполагаю иное. OpenVPN корректно запускается, однако что-то в последствии переинициализирует tun0 и сбрасывает IP-адрес. Ведь по данным systemd-analyse OpenVPN запускается уже после networking, так что сеть должна быть готова.

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

Как вариант стартовать его последним. Вроде в сисдмемд можно прикрутить аналог rc.local (во всяком случае на просторах инета я об этом слышал) вот туда и прописать его.

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