Вопрос или проблема
Если я настраиваю свою беспроводную сеть при запуске (wpa_supplicant & dhclient), соединение работает нормально, пока я не запущу OpenVPN.
В этот момент беспроводной интерфейс разъединяется (не дожидаясь установления туннеля), и мне нужно вручную его восстановить, перезапустив сеть или выполнив команды ifdown/ifup. Это работает, но вызывает массу неудобств.
dmesg сообщает:
ADDRCONF(NETDEV_CHANGE) wlan0: ссылка готова
wlan0: разъединение от 00:00:00:00:00:00 по местному выбору (причина=3)
cfg80211: Вызов CRDA для обновления всемирной регуляторной зоны
ADDRCONF(NETDEV_CHANGE) wlan0: ссылка не готова
OpenVPN не выдает никаких сообщений об ошибках, кроме того, что не может связаться с сервером, когда WiFi отключается.
Я пробовал создать как устройства tun, так и tap без OpenVPN, и это работает нормально, им могут быть назначены IP-адреса.
wpa_supplicant и wpa_cli продолжают работать, даже когда интерфейс отключен, поэтому мне нужно выполнить
ifdown --force wlan0
Я упростил свою конфигурацию OpenVPN до минимальной примерной конфигурации, и та же проблема все еще возникает.
Я также пробовал это с устройствами rt2800 и rtl8187, оба испытывают такое же поведение.
Мои конфигурационные файлы выглядят следующим образом, но у меня не было с ними проблем до попытки запустить OpenVPN.
Файл интерфейсов
#/etc/network/interfaces
auto wlan0
iface inet wlan0 manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
wpa-driver wext
iface inet default dhcp
wpa_supplicant
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=netdev
update_config=1
eapol_version=1
ap_scan=1
fast_reauth=1
network={
ssid="myap"
scan_ssid=1
key_mgmt=WPA-EAP
eap=TTLS
ca_cert="/etc/ssl/certs/certificate.pem"
identity="me"
password="mypassword"
phase1="peaplabel=0"
phase2="auth=MSCHAPV2"
priority=1
}
ИЗМЕНИТЬ:
После небольшого отладки я выяснил, что это связано с опцией wpa-roam, изменение на wpa-conf решает проблему (wpa_cli не запускается). Я обновлю информацию, когда сузю поиск до конкретного сигнала, вызывающего проблему.
ИЗМЕНИТЬ2:
Я обновил wpa_supplicant с 1.0 до 2.0, и та же проблема все еще возникает, WiFi просто разъединяется от AP, когда формируется туннель OpenVPN, беспроводной интерфейс на самом деле не отключается (предварительные, нижние и постпрограммные события не вызываются, когда это происходит).
Вопрос в несколько другом контексте, но ответ здесь…
Перенаправление с eth0 на wlan0 в Debian с OpenVPN
В основном ifplugd отключает беспроводной интерфейс. Поскольку только один роуминговый интерфейс должен быть активен одновременно.
Когда это вызывается:
/etc/ifplugd/action.d/action_wpa tun0 up
Скрипт зацикливается, отключая все устройства wpa-roaming…
for CTRL in /var/run/wpa_supplicant/*; do
[ -S "${CTRL}" ] || continue
IFACE="${CTRL#/var/run/wpa_supplicant/}"
# пропустить, если ifplugd управляет этим интерфейсом
if [ "${IFPLUGD_IFACE}" = "${IFACE}" ]; then
continue
fi
if wpa_action "${IFACE}" check; then
wpa_cli -i "${IFACE}" "${COMMAND}"
fi
done
Этот скрипт нужно расширить, чтобы проверять и другие интерфейсы, управляемые ifplugd, а не только тот, который был вызван в скрипте.
Ответ или решение
Проблема, с которой вы столкнулись, когда OpenVPN вызывает отключение WLAN/WiFi в Linux, может быть связана с конфликтом между управляющей системой подключениями ваших сетевых интерфейсов и конфигурацией OpenVPN. Основные причины и способы решения данной проблемы описаны ниже.
Причины проблемы
-
Конфликт с
ifplugd
: Как упоминалось в вашем вопросе, еслиifplugd
управляет беспроводным интерфейсом и активирует действиеwpa-roam
, это может привести к тому, что интерфейс будет отключаться, когда OpenVPN устанавливает туннель. Скрипт управления отifplugd
может не корректно обрабатывать отключение интерфейсов, что приводит к отключению вашего WLAN. -
Опция
wpa-roam
: Как вы уже отметили, использованиеwpa-roam
может вызывать проблемы, так как этот метод предусматривает автоматическую смену соединений. Как только OpenVPN инициирует соединение, происходит сбой в обновлении управляющих параметров WiFi. -
Проблемы с совместимостью драйверов: Иногда используемые драйверы для вашего WiFi-адаптера могут влиять на стабильность соединения при активации VPN.
Решение проблемы
-
Смена конфигурации на
wpa-conf
: Вы уже обнаружили, что изменение конфигурации сwpa-roam
наwpa-conf
решает проблему. Это может быть хорошим решением, так какwpa-conf
управляет соединением более предсказуемо.Пример:
auto wlan0 iface wlan0 inet dhcp wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
-
Настройка
ifplugd
: Если вы хотите продолжать использоватьwpa-roam
, вам может потребоваться изменить логику скрипта действияifplugd
. Вы можете сделать это, добавив проверку, чтобы не отключать активные интерфейсы, управляемые OpenVPN. Это поможет избежать отключения WLAN при установке VPN:Пример изменения скрипта:
if [ "${IFPLUGD_IFACE}" = "tun0" ]; then # Проверяем, если текущий интерфейс - это туннель OpenVPN continue fi
-
Проверка журналов: Убедитесь, что в журналах
dmesg
и других логах нет серьезных ошибок, которые могут указывать на проблемы с драйверами или сетью. -
Обновите программное обеспечение: Поскольку вы уже пробовали обновить
wpa_supplicant
, убедитесь, что все компоненты системного программного обеспечения актуальны, включая OpenVPN и драйверы для вашего WLAN-адаптера. -
Тестирование с другими драйверами: Если проблема сохраняется, попробуйте использовать альтернативные драйверы для вашего WiFi-адаптера, если таковые доступны. Это может улучшить совместимость.
Заключение
Если после выполнения всех вышеперечисленных шагов проблема не будет решена, рекомендуем обратиться за поддержкой в сообщества разработки OpenVPN или wpa_supplicant, так как это может быть специфическая проблема конфигурации или несовместимости вашего оборудования.