Я пытаюсь заставить своего клиента пересылать весь трафик через VPS с OpenVPN. Как видите, он разрешает пинговые запросы как к доменам, так и к необработанным IP-адресам, но не разрешает трафик, подобный тому, который создается через curl, а traceroute ничего не дает. Трафик работает правильно, когда он не подключен к VPN.
Вся информация здесь: https://pastebin.com/tGspNefn
Спасибо.
Рабочие конфигурации благодаря решению ниже:
Сервер:
port <integer>
proto udp
dev tun
ca ca.crt
cert vpnserver.crt
key vpnserver.key # This file should be kept secret
dh dh4096.pem
tls-auth ta.key 0
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway autolocal"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
keepalive 10 120
cipher AES-256-CBC
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3
Клиент:
client
dev tun
proto udp
remote x.x.x.x <port number>
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert vpnclient.crt
key vpnclient.key
tls-auth ta.key 1
ns-cert-type server
cipher AES-256-CBC
comp-lzo
verb 3
Решение состоит из двух частей:
1. Перенаправить весь трафик в туннель.
Самое простое решение - использовать OpenVPN. --redirect-gateway autolocal
вариант (или поместите его в файл конфигурации как redirect-gateway autolocal
.
2. Обработка трафика на сервере OpenVPN.
Теперь, когда туннель открыт, весь трафик идет в туннель и появляется на конце сервера из tun0
интерфейс.
Чтобы он работал, вам нужно настроить две вещи:
а. Включить пересылку пакетов
По умолчанию в большинстве дистрибутивов пересылка пакетов отключена, поэтому пакеты из туннельного интерфейса никогда не попадают в общедоступный интерфейс. Вы должны включить пересылку с помощью:
~ # sysctl net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
После тестирования сделайте изменение постоянным в /etc/sysctl.conf
Также убедитесь, что iptables
не блокируют перенаправляемый трафик:
~ # iptables -I FORWARD -j ACCEPT
Этого достаточно для тестирования - в производственной среде вы захотите сделать правила брандмауэра более конкретными, но здесь это выходит за рамки.
б. NAT исходящие пакеты из туннеля
При включенной пересылке пакеты по умолчанию пересылаются с неизменным исходным адресом, то есть в вашем случае 10.8.0.6
- такие пакеты либо отбрасываются на шлюзе ISP, либо даже если они попадают в пункт назначения, ответ никогда не находит обратного пути. Эти частные адреса не маршрутизируются в Интернете.
Решение - преобразовать исходящий трафик через NAT, т.е. заменить частный 10.8.0.6
адрес с общедоступным IP-адресом VPN-сервера. Это гарантирует, что ответы достигнут VPN-сервера, и там они будут перенаправлены обратно в туннель.
~ # iptables -t nat -I POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
3. Проверьте это
Теперь попробуй ping 8.8.4.4
из вашего VPN-клиента. Вы должны увидеть ответ. Дайте нам знать, если нет :)