LINUX.ORG.RU
ФорумAdmin

Настройка tap адаптера в openvpn

 ,


0

0

Приветствую. Есть удаленный хост с OVPN и клиенты. Задача сделать связь между клиентами для доступа широковещательных пакетов между друг другом.

Делаю согласно инструкции с оф. сайта https://openvpn.net/community-resources/ethernet-bridging/#linuxscript. При стандартном tun соединение и дефолтной настройке все работает.

Вывод ifconfig на хосте:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether *** brd ff:ff:ff:ff:ff:ff
    inet 194.87.***/24 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 ***/64 scope link
       valid_lft forever preferred_lft forever
3: tap0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether da:a6:fd:a8:69:6a brd ff:ff:ff:ff:ff:ff

Согласно вышеуказанной инструкции создаю руками bridge br0 и скрипт bridge-start (так и не понял, как его правильно надо прописать в конфиг сервера и где лежат все примеры sample-scripts по этому просто положил его в папку с сервером OVPN. Выключаю службу openvpn, выключаю eth0, исполняю скрипт и ругается, что tap0 Занят (errno=16). В итоге отваливается сеть до хоста. Делаю запуск systemctl start openvpn@server, ругается, что совершена ошибка и надо посмотреть Journalctl. Там ничего интересного, ошибка с кодом exited и, что не удалось подключиться к /etc/openvpn/server/server.conf. При том, что служба Openvpn зеленая и ошибок в ней нет.

Я как понимаю,в мост загонять единственный адаптер(что и описано в инструкции) нельзя, как тогда быть? Прошу обратить внимание на конфиг сервера и подсказать, где я допускаю ошибки.

port 1194
proto udp
dev tap0
ca ca.crt
cert server.crt
key server.key
dh dh.pem
auth SHA512
tls-crypt tc.key
topology subnet
server-bridge 10.8.0.1 255.255.255.0 10.8.0.2 10.8.0.3
push "redirect-gateway def1 bypass-dhcp"
ifconfig-pool-persist ipp.txt
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 77.88.8.8"
push "block-outside-dns"
keepalive 10 120
user nobody
group nogroup
persist-key
persist-tun
verb 3
crl-verify crl.pem
explicit-exit-notify```


Последнее исправление: Dimez (всего исправлений: 1)

Согласно вышеуказанной инструкции создаю руками bridge br0 и скрипт bridge-start

В инструкции вроде про ручное создание br0 не сказано ( смотрел наискосок может м пропустил), усё делают скрипты, в том числе создание и удаление бриджа.

Я как понимаю,в мост загонять единственный адаптер(что и описано в инструкции) нельзя

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

anc ★★★★★
()

Упоминание в инструкции Windows XP SP2, Windows 2000 и Kernel 2.6 ни на какие мысли не навело?

Если не обратили внимание - подскажу. У вашего tap0 сразу же после имени интерфейса четко и ясно написано: <BROADCAST,MULTICAST>. Какие еще вам широковещательные пакеты нужны?

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

у меня в аналогичной ситуации прописанно client-to-client в конфиге сервера. Бриджей на стороне сервера не настроено, т.к. мне нужен L2 сегмент только между клиентами (иных сетей на стороне vpn сервера нет).
(ради интереса попробовал убрать client-to-client - клиенты подключаются, но трафик не ходит. Т.е для tap эта опция тоже важна).

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

Если обратить внимание, то это отдельная инструкция по настройке сервера на Win xp и выше. Нам же это не интересно.

Да, отлично, broadcast у адаптера есть. Тогда почему если в данной конфигурации все стоит, на сервере и клиенте как адаптер tap, то клиент подключается только к серверу и больше никого не видит?

Нет, может все и так, просто проблема в конфиге. Поправьте, пожалуйста, если там есть ошибка.

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

Отличный кейс. Arp же работает между клиента(для проверки)?

Пришлите, пожалуйста свой ifconfig для примера и было бы здорово увидеть конфиг ovpn сервера и клиента. Может просто сделаю как у вас.

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

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

Тем не менее, при создании бриджа линк падает(кстати, почему?) и клиенты даже не могут создать туннель.

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

Отличный кейс. Arp же работает между клиента(для проверки)?

Ну да, arping работает.

Пришлите, пожалуйста свой ifconfig для примера и было бы здорово увидеть конфиг ovpn сервера и клиента. Может просто сделаю как у вас.

я не очень понимаю Вашу задачу. У Вас в конфиге

server-bridge 10.8.0.1 255.255.255.0 10.8.0.2 10.8.0.3
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 77.88.8.8"
push "block-outside-dns"
Т.е. предполагается, что у vpn-клиентов default gateway станет 10.8.0.1 (через который он сможет достучаться до 77.88.8.8)?
Но для связи между vpn-клиентами это лишнее. Либо задача несколько шире, чем просто поднять L2 сеть между vpn-клиентами.

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

Т.е. предполагается, что у vpn-клиентов default gateway станет 10.8.0.1 (через который он сможет достучаться до 77.88.8.8)? Но для связи между vpn-клиентами это лишнее. Либо задача несколько шире, чем просто поднять L2 сеть между vpn-клиентами.

Наверное, так. Но мне ДНС не нужен, если конечно имена локальных хостов будут резолвится, будет здорово. Насколько мне известно, WINS между виндовс клиентами работает без проблем.

Задача не шире, именно так как и описал, надо соединять клиентов в одну подсеть с хождением широковещательных пакетов. Вероятно(очень мало), что потребуются и резолвы имен клиентов между собой. WAN сеть не нужна, буду даже искать возможность на момент включения VPN искать способ отключения клиентов от глобальной сети. Только пакеты по 10.8.0.0 сети. По этому я и прошу ваши рабочие конфиги, сделать просто по вашей аналогии.

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

Что значит «не видит»? Кого не видит? Других клиентов в сети OVPN или локальную сеть сервера?

Клиентов не видит, сам хост по 10.8.0.1 не пингует, выхода в глобальную сеть также нет. По сути можно сказать, что подключение есть к vpn, но все, что в этой сети и даже шлюз не виден.

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

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

я думаю, что не следует просто копировать, т.к. у меня и IP назначаются статикой, а не через push, как у Вас, и много чего другого отличается.

Примерно так должен выглядеть конфиг VPN-сервера, чтобы vpn-клиенты «видели» друг-друга по IP 10.8.0.x:

port 1194
proto udp
dev tap0
ca ca.crt
cert server.crt
key server.key
dh dh.pem
auth SHA512
tls-crypt tc.key
topology subnet
ifconfig-pool 10.8.0.2 10.8.0.3 255.255.255.0
ifconfig-pool-persist ipp.txt
client-to-client
keepalive 10 120
user nobody
group nogroup
persist-key
persist-tun
verb 3
crl-verify crl.pem
explicit-exit-notify

Мосты на стороне VPN-сервера или клиентов в этом случае не нужны.

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

Разве ТС где-то, что-то сказал за дистр?
Ответы из 3-х разных дистров на команду ls /usr/share/openvpn :

1. /bin/ls: cannot access '/usr/share/openvpn': No such file or directory

2. verify-cn

3. ls: cannot access '/usr/share/openvpn/': No such file or directory

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

Вставил ваш конфиг на еще старый сервер ovpn, не заработало(да, не заметил, в конфиге сервера была еще первая строчка local и адрес сервера). Делал systemctl status openvpn@server, также сыпет ошибку

Cipher negotiation is disabled since neither P2MP client nor server mode is enabled

WARNING: Ignoring option 'dh' in tls-client mode, please only include this in your server configuration

Options error: --ifconfig-pool/--ifconfig-pool-persist requires --mode server

Решил переустановить сервер. Переустановил, пересоздал клиента. Проверяю статус подключения, также ошибка 1

Options error: In [CMD-LINE]:1: Error opening configuration file: /etc/openvpn/server.conf

Вставил ваш конфиг, на клиенте поменял на tap. Проверил сетевые интерфейсы сервера - нет адаптера tap0, только l0 и eth0.(Странно, ранее сам ovpn создавал адаптер). Делаю интерфейс вручную: ip tuntap add dev tap0 mode tap Создан интерфейс, статус DOWN. Поднимаю ip link set dev tap0 up, результата нет. По итогу, сейчас даже клиент туннель не строит.

Прошу описать более детальный процесс настройки сервера после установки(использую скрипт, в котором указываю протокол, порт, днс сервер и имя клиента). Чем больше я пытаюсь найти причины проблемы, тем дальше закапываюсь и больше создаю проблем.

Конфиг клиента

client
dev tap
proto udp
remote 194.87*** 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
auth SHA512
ignore-unknown-option block-outside-dns
verb 3
И далее сертификаты
slowemotions
() автор топика
Ответ на: комментарий от slowemotions

Давайте сначала:

Во-первых, какой дистрибутив linux используете?

Делаю интерфейс вручную

Ничего не надо вручную делать. OVPN всё делает сам при включении, в том числе поднятие интерфейсов.

Минимальная рабочая конфигурация для сервера:

port 1194
proto udp
dev tap
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
topology subnet
server 10.8.0.0 255.255.255.0
keepalive 10 120
persist-key
persist-tun
verb 3
explicit-exit-notify 1

Для клиента

client
dev tap
proto udp
remote 194.87*** 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
remote-cert-tls server
verb 3

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

Попробуйте так:

mode server
  
local тут_адрес_сервера

port 1194
proto udp
dev tap0
ca ca.crt
cert server.crt
key server.key
dh dh.pem
auth SHA512
tls-crypt tc.key
topology subnet
ifconfig-pool 10.8.0.2 10.8.0.3 255.255.255.0
ifconfig-pool-persist ipp.txt
client-to-client
keepalive 10 120
user nobody
group nogroup
persist-key
persist-tun
verb 3
crl-verify crl.pem
explicit-exit-notify

Либо, конфиг предложенный тут Настройка tap адаптера в openvpn (комментарий) , но с доп. опцией client-to-client.

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

Вы не поняли моего вопроса? Ну хорошо, ловите:

1. ls /usr/share/doc/openvpn
/bin/ls: cannot access '/usr/share/doc/openvpn': No such file or directory
2. ls /usr/share/doc/openvpn
AUTHORS		     management-notes.txt.gz  README.down-root
changelog.Debian.gz  NEWS.Debian.gz	      README.IPv6
changelog.gz	     PORTS		      README.mbedtls
copyright	     README		      README.systemd
COPYRIGHT.GPL.gz     README.auth-pam
examples	     README.Debian.gz
3. ls /usr/share/doc/openvpn
ls: cannot access '/usr/share/doc/openvpn': No such file or directory
Итого на примере трех дистров:
1. Первый ваш совет оказался пуком в лужу целиком.
2. Второй ваш совет оказался пуком в лужу на две трети.
Продолжите потуги?

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

Увы, коллеги, ни один из ваших вариантов не дал результата. Как ранее адаптер tap0 не поднимается, пробовал сделать через tun, результат тот-же. Клиент не устанавливает связь с хостом. Последнее из клиентского лога.

Fri Jun  6 23:47:55 2025 ovpn-dco device [OpenVPN Data Channel Offload] opened
Fri Jun  6 23:47:55 2025 UDP link local: (not bound)
Fri Jun  6 23:47:55 2025 UDP link remote: [AF_INET]194.87.***:1194
Fri Jun  6 23:47:55 2025 MANAGEMENT: >STATE:1749242875,WAIT,,,,,,
Fri Jun  6 23:48:55 2025 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
Fri Jun  6 23:48:55 2025 TLS Error: TLS handshake failed

Iptables разрешает все соединения и форвард. Система убунту 22.04. Может уже что-то в системе сломано, попробовать на чистую? Также интересно, почему постоянно наблюдается какая-то ошибка при построении туннеля? То есть формально, я не могу перезагрузить туннель, для полной уверенности перезагружаю сервер.

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

Система убунту 22.04. Может уже что-то в системе сломано, попробовать на чистую?

вряд ли. Ведь конфигурация с tun у Вас ранее работала (и клиенты подключались к серверу).

Также интересно, почему постоянно наблюдается какая-то ошибка при построении туннеля? То есть формально, я не могу перезагрузить туннель, для полной уверенности перезагружаю сервер.

видимо потому, что vpn-cервер не стартовал из-за некорректного конфига (поэтому и не создал tap интерфейс).
Что там в логах vpn-сервера?

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

TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)

Мда, типичная XY problem. А с учетом:

ovpn-dco

оно накладывает ещё и свои особенности, прям недавно здесь тема была.

Также интересно, почему постоянно наблюдается какая-то ошибка при построении туннеля? То есть формально, я не могу перезагрузить туннель,

Можете.

для полной уверенности перезагружаю сервер.

Ну если так нравиться...

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

Заработало!

Для начала переустановил систему. Использовал другой скрипт для установки ovpn. Сделал форвардинг в /etc/sysctl.conf, конфиги настроил следующим образом:

Сервер

port 1194
proto udp
dev tap
user nobody
group nogroup
persist-key
persist-tun
keepalive 10 120
topology subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "dhcp-option DNS 94.140.14.14"
push "dhcp-option DNS 94.140.15.15"
push "redirect-gateway def1 bypass-dhcp"
dh none
client-to-client
ecdh-curve prime256v1
tls-crypt tls-crypt.key
crl-verify crl.pem
ca ca.crt
cert server_***.crt
key server_***.key
auth SHA256
cipher AES-128-GCM
ncp-ciphers AES-128-GCM
tls-server
tls-version-min 1.2
tls-cipher TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256
client-config-dir /etc/openvpn/ccd
status /var/log/openvpn/status.log
verb 3

Клиент

client
proto udp
explicit-exit-notify
remote 194.87.*** 1194
dev tap
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
verify-x509-name server_*** name
auth SHA256
auth-nocache
cipher AES-128-GCM
tls-client
tls-version-min 1.2
tls-cipher TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256
ignore-unknown-option block-outside-dns
setenv opt block-outside-dns # Prevent Windows 10 DNS leak
verb 3
Далее сертификаты

Подскажите, отключение шифрования может уменьшить задержки между клиентами?

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

Также интересно, как можно клиентам отключить доступ за пределы 10.8.0.0? Ну то есть запретить доступ к WAN. Комментирование пушей только лишь закрыло ДНСы, по адресам выход наружу есть.

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

Я откуда знаю, где в вашем дистрибутиве примеры конфигов? ТС уже сообщил, а у него они как раз в /usr/share/doc/openvpn/examples/sample-config-files, так что я со второго раза угадал. А вы можете дальше продолжать кичиться. Это даже забавно)

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

Подскажите, отключение шифрования может уменьшить задержки между клиентами?

Шифрование загружает только камень, если у вас железо справляется, то не дергайтесь.

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

Тогда это вопрос к ТС.

Нет, это вопрос к вам: Вы каким местом читаете, раз не осилили прочитать Настройка tap адаптера в openvpn (комментарий) , но умудрились сделать вывод: «ТС уже сообщил, а у него они как раз в /usr/share/doc/openvpn/examples/sample-config-files» ?

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

Пятница сказывается)

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

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

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

openvpn --help | wc -l
513

не заколебетесь методом комбинаторики рабочий вариант подбирать?

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

Потому что у ТС всё сложно почему-то оказалось. Настройка tap адаптера в openvpn (комментарий)

Мы же разбираем вопрос ТС? Или что? У меня и так всё работает. Или у вас не работает? Дык создайте отдельную тему - будем разбирать конкретно ваш тяжелый случай.

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

Потому что у ТС всё сложно почему-то оказалось. Настройка tap адаптера в openvpn (комментарий)

Конечно сложно если учесть это:

Fri Jun  6 23:48:55 2025 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)

anc ★★★★★
()