如果我在启动时配置我的无线网络(wpa_supplicant 和 dhclient),那么连接就很好,直到我启动 OpenVPN。
此时无线接口断开连接(直到隧道建立),我必须通过重新启动网络或执行 ifdown/ifup 手动将其恢复。这确实有效,但真的很麻烦。
dmesg 报告:
ADDRCONF(NETDEV_CHANGE) wlan0: link becomes ready
wlan0: disassociating from 00:00:00:00:00:00 by local choice (reason=3)
cfg80211: Calling CRDA to update world regulatory domain
ADDRCONF(NETDEV_CHANGE) wlan0: link is not ready
除了一旦 WiFi 断线就无法连接服务器之外,OpenVPN 不会抛出任何错误消息。
我尝试过创建不使用 OpenVPN 的 tun/tap 设备,这完全没问题,可以为它们分配 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,但同样的问题仍然存在,当 openvpn 隧道形成时,WiFi 只是与 AP 分离,无线接口实际上并没有被关闭(发生这种情况时不会调用 pre、down、post)
答案1
问题的背景略有不同,但答案就在这里......
Debian eth0 到 wlan0 转发,使用 openvpn
基本上,ifplugd 会关闭 WiFi 接口。因为一次只能有一个漫游接口处于活动状态。
当调用它时:
/etc/ifplugd/action.d/action_wpa tun0 up
该脚本循环断开所有 wpa 漫游设备......
for CTRL in /var/run/wpa_supplicant/*; do
[ -S "${CTRL}" ] || continue
IFACE="${CTRL#/var/run/wpa_supplicant/}"
# skip if ifplugd is managing this interface
if [ "${IFPLUGD_IFACE}" = "${IFACE}" ]; then
continue
fi
if wpa_action "${IFACE}" check; then
wpa_cli -i "${IFACE}" "${COMMAND}"
fi
done
需要扩展此脚本以检查 ifplugd 管理的其他接口,而不仅仅是检查用脚本调用的接口。