Я установил OpenVPN на Raspberry PI (сервер: 192.168.0.2) и на своем ноутбуке Ubuntu (клиент: 192.168.0.3). Обе машины подключены к одной беспроводной сети, и их адреса назначены DHCP от беспроводного маршрутизатора по адресу 192.168.0.1. Однако, когда VPN запускается, я не могу получить доступ к Интернету с клиента.
Когда я запускаю OpenVPN на сервере (со следующими параметрами), он запускается правильно.
port 1194
proto udp
dev tun
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key
dh /etc/openvpn/keys/dh2048.pem
cipher AES-256-CBC
auth SHA512
topology subnet
server 10.8.0.0 255.255.255.0
push "dhcp-option DNS 8.8.8.8"
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3
Когда я запускаю OpenVPN на клиенте (со следующими параметрами), он тоже, кажется, запускается правильно.
ca keys/ca.crt
cert keys/client-no-pass.crt
key keys/client-no-pass.key
remote 192.168.0.2 1194
comp-lzo
client
dev tun
redirect-gateway local
remote-cert-tls server
cipher AES-256-CBC
auth SHA512
proto udp
resolv-retry infinite
nobind
persist-key
persist-tun
verb 3
mute 20
На клиенте я вижу, что моей таблицей IP-маршрутизации манипулировали, чтобы использовать IP-адрес VPN сервера в качестве маршрута по умолчанию, и что весь трафик в сеть VPN будет поступать с IP-адресом tun0 10.8.0.4.
me@client:~$ ip route
default via 10.8.0.1 dev tun0
10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.4
169.254.0.0/16 dev wlp4s0 scope link metric 1000
192.168.0.0/24 dev wlp4s0 proto kernel scope link src 192.168.0.3 metric 600
Когда VPN отключена, я могу пинговать 8.8.8.8 (DNS-сервер). Когда VPN подключен, я не могу.
После поиска в Google я попытался добавить это на сервер, но это не помогает:
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o wlan0 -j SNAT --to-source 192.168.0.2
Что я делаю неправильно? Как я могу это исправить? Мой сценарий локальной сети WLAN VPN просто не поддерживается? Я попытался запустить Wireshark для захвата трафика tun0 от клиента, но не смог решить эту проблему.
РЕДАКТИРОВАТЬ: Дополнительная информация:
IP-адрес сервера был "зарезервирован" (по MAC-адресу), поэтому маршрутизатор всегда назначает ему один и тот же адрес.
192.168.0.2
Сервер настроен (путем редактирования
/etc/sysctl.conf
) для пересылки пакетов IPV4, и это было проверено с помощью командыcat /proc/sys/net/ipv4/ip_forward
(возвращает 1)Таблица маршрутизации сервера показывает это:
me@server:~$ ip route default via 192.168.0.1 dev wlan0 metric 303 10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.1 192.168.0.0/24 dev wlan0 proto kernel scope link src 192.168.0.2 metric 303
- Брандмауэр сервера выглядит так:
me@server:~ $ sudo iptables -S -P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A FORWARD -s 10.8.0.0/24 -i tun0 -o wlan0 -m conntrack --ctstate NEW -j ACCEPT me@server:~ $ sudo iptables -t nat -S -P PREROUTING ACCEPT -P INPUT ACCEPT -P OUTPUT ACCEPT -P POSTROUTING ACCEPT -A POSTROUTING -s 10.8.0.0/24 -o wlan0 -j MASQUERADE