Маршрут трафика c через OpenVPN docker - PullRequest
1 голос
/ 18 июня 2020

Я хотел бы настроить VPN-сервер и направить весь трафик клиентов c через VPN.

Для этого я запускаю VPN-сервер, используя OpenVPN docker изображение kylemanna/openvpn. Мой docker работает на Kubernetes и не использует хост-сеть. Я также добавил возможность NET_ADMIN и включил привилегированный режим.

Чтобы настроить мой образ docker в качестве шлюза, я настроил NAT (внутри docker), используя iptables

iptables -I FORWARD -i tun0 -o eth0 -s 192.168.255.0/24 -m conntrack --ctstate NEW -j ACCEPT
iptables -I FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -I POSTROUTING -o eth0 -s 192.168.255.0/24 -j MASQUERADE

К сожалению, что-то не так. Могу отлично коннектиться к VPN и пинговать на любой publi c IP. Я также могу без проблем подключиться к любому HTTP-трафику c. Если я curl http://ifconfig.co, я также вижу, что мой IP-адрес изменился на IP-адрес моего сервера. Итак, пока здесь все работает, как ожидалось.

Но он работает только с HTTP-трафиком c, если я попытаюсь скрутить Google с помощью HTTP, я получу ответ, но используя HTTPS, я не получу никакого ответа. . Я проверил это с помощью tcpdump, и пакеты возвращаются на клиентскую сторону.

Когда я скручиваю в подробном режиме Google, вот что происходит до того, как он зависает:

curl -v https://www.google.com
*   Trying 172.217.20.100:443...
* TCP_NODELAY set
* Connected to www.google.com (172.217.20.100) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: none
* TLSv1.3 (OUT), TLS handshake, Client hello (1):

Кто-нибудь знает, как это отладить / почему HTTPS не работает, а HTTP работает?

Спасибо

...