Я пытаюсь использовать сервер Google Compute Engine в качестве VPN-сервера для всего своего трафика (я живу в России, у нас есть проблемы с цензурой).
Есть мини-учебник по VPN на GCE, но речь идет о сети между двумя серверами внутри GCE, а не с OpenVPN.
Я сделал все шаги из другого урока, о настройка VPN с OpenVPN на Debian, Я могу подключиться к VPN с клиента, но тогда я не могу открывать подключения (даже не могу пинговать Google). На сервере могу пинговать и скачивать все как обычно.
У меня есть VPN на Linode с такой же настройкой, и он отлично работает. Итак, проблема заключается в сетевой маршрутизации GCE или правилах брандмауэра.
Перепробовал много вариантов, но ничего не работает. Пожалуйста, посмотрите настройки и подскажите, что мне изменить.
// строки конфигурации удалены, потому что проблема решена //
Прежде всего, спасибо @Shivox за его ответ.
И вот краткое руководство:
sudo su
apt-key update && apt-get update && apt-get -y upgrade && apt-get -y install python-software-properties && apt-get -y install software-properties-common && add-apt-repository -y ppa:pritunl && apt-get update && apt-get -y install pritunl
https://instance_ip:9700
pritunl
как имя пользователя и парольЯ использую Visidity для OS X и OpenVPN connect для iOS в качестве клиентов. В вязкости включите параметр «Отправлять весь трафик через VPN-соединение» на вкладке «Сеть».
Вы можете решить проблему невозможности просмотра веб-страниц через VPN, несмотря на то, что у вас есть возможность выполнить ping, traceroute ... одним из двух следующих способов:
Во-первых, вы можете использовать протокол TCP вместо UDP, изменив «proto udp» на «proto tcp» в файлах конфигурации клиента и сервера.
Во-вторых, вы можете использовать устройство Tap вместо tun, изменив «dev tun» на «dev tap» в файлах конфигурации клиента и сервера.
Не уверен, в чем проблема, похоже, проблема со стороны Google.
Помните, что Google VPC отбрасывает пакеты, source_ip
кроме внутреннего IP-адреса виртуальной машины, имеющей внешний IP-адрес.
Этот документ https://cloud.google.com/compute/docs/vpc/advanced-vpc состояния:
Сеть VPC перезаписывает IP-заголовок, чтобы объявить внешний IP-адрес экземпляра в качестве источника. Если у экземпляра нет внешнего IP-адреса, вызов не разрешен, и сеть VPC отбрасывает пакет, не сообщая отправителю.
Поэтому, если ваш openVPN просто пересылает пакеты из другой сети, тогда пакеты на общедоступную внутреннюю сеть будут отброшены как source_ip
не соответствует внутреннему IP-адресу существующей виртуальной машины. По этой причине вам нужно преобразовать пакеты, покидающие вашу локальную сеть, например, на вашем узле VPN.
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 192.168.0.0/16 !192.168.0.0/16
"Pritunl", упомянутый в ответе OZ_, работает, потому что он автоматически настраивает NAT.
На самом деле это не ответ, но сайт не разрешил мне добавить его в качестве комментария к вашему вопросу.
Тем не менее, у меня почти такая же конфигурация, как вы описали выше (я не сильно настраивал dnsmaq на сервере)
К сожалению, VPN работает не так, как ожидалось. Я могу разрешить адрес, проверить связь с некоторыми Интернет-узлами и даже провести полную трассировку при подключении к VPN. Однако когда я открываю браузер и перехожу на сайт, соединение очень медленное. Не знаю, что может повлиять на соединение, но это действительно странная проблема.
Может быть, кто-нибудь из Google поможет нам узнать, что происходит.
PS 1. Как уже предлагали другие люди, можете ли вы проверить, включена ли переадресация IP? Для меня единственный способ обеспечить ценность net.ipv4.ip_forward был правильно восстановлен после перезагрузки после того, как я использовал настраиваемое правило в /etc/sysctl.d
Например, вы можете добавить правило, используя следующую команду:
$ sudo echo "net.ipv4.ip_forward = 1" > /etc/sysctl.d/90-useroverrides.conf
PS 2. Если форвард работает для вас, можете ли вы протестировать трассировку маршрута к внешнему хосту при подключении к VPN ?. Результат, который я получил, когда я это сделал, немного странный (почему на одном IP-адресе несколько переходов ????):
$ sudo traceroute www.yahoo.com -T -p 80 -N 1 -z 0.5 -q 1
traceroute to www.yahoo.com (98.139.183.24), 30 hops max, 60 byte packets
1 209.85.241.26 (209.85.241.26) 0.764 ms
2 209.85.241.34 (209.85.241.34) 0.668 ms
3 209.85.241.26 (209.85.241.26) 0.966 ms
4 209.85.241.36 (209.85.241.36) 0.702 ms
5 209.85.241.28 (209.85.241.28) 0.865 ms
6 209.85.241.36 (209.85.241.36) 0.642 ms
7 209.85.241.26 (209.85.241.26) 0.921 ms
8 209.85.241.28 (209.85.241.28) 18.837 ms
9 72.14.238.107 (72.14.238.107) 13.378 ms
10 72.14.237.131 (72.14.237.131) 38.275 ms
11 209.85.254.131 (209.85.254.131) 13.349 ms
12 *
13 ae-8.pat1.bfz.yahoo.com (216.115.101.231) 44.903 ms
14 ae-4.msr1.bf1.yahoo.com (216.115.100.25) 45.323 ms
15 xe-10-3-1.clr1-a-gdc.bf1.yahoo.com (98.139.232.101) 47.382 ms
16 et18-25.fab6-1-sat.bf1.yahoo.com (98.139.128.103) 45.793 ms
17 po-13.bas1-7-prd.bf1.yahoo.com (98.139.129.209) 41.143 ms
18 ir2.fp.vip.bf1.yahoo.com (98.139.183.24) 42.451 ms
PS 3. Единственное, что работает правильно, это то, что VPN использует внешний IP-адрес моего хоста для доступа в Интернет.
$ sudo curl --interface tun0 checkip.dyndns.org
<html><head><title>Current IP Check</title></head><body>Current IP Address: 107.178.XXX.XXX</body></html>
редактировать /etc/sysctl.conf
раскомментировав #net.ipv4.ip_forward=1
Это должно позволить OpenVPN направлять ваш трафик.
Вам необходимо включить переадресацию IP для вашего экземпляра виртуальной машины в облаке Google, иначе пакеты не достигнут вашей виртуальной машины. Обратите внимание, это отдельно от net.ipv4.ip_forward = 1
который вы можете установить в своей виртуальной машине.
Переадресация IP может быть установлена только один раз перед созданием виртуальной машины и не может быть изменена впоследствии. Чтобы включить его для новой виртуальной машины, нажмите Management, security, disks, networking, sole tenancy
:
Затем в Networking
вкладка нажмите на Network Interface
и установите для IP Forwarding значение ON
:
Вам необходимо добавить правило, разрешающее трафик для самого OpenVPN:
iptables -A INPUT -p udp --dport 1194 -j ACCEPT
О сети.
1) Включите весь трафик из подсети OpenVPN (например, 10.8.0.0/24) на консоли
2) Я настоятельно рекомендую Вам добавить Masquerade в свою сеть
firewall-cmd --zone=trusted --add-masquerade --permanent
firewall-cmd --reload-all
3) Не забываем включить маршрутизацию пакетов в ядре
а) однажды
echo 1 > /proc/sys/net/ipv4/ip_forward
б) навсегда в /etc/sysctl.conf:
net.ipv4.ip_forward = 1