Назад | Перейти на главную страницу

VPN-сервер на Google Compute Engine с OpenVPN

Я пытаюсь использовать сервер Google Compute Engine в качестве VPN-сервера для всего своего трафика (я живу в России, у нас есть проблемы с цензурой).

Есть мини-учебник по VPN на GCE, но речь идет о сети между двумя серверами внутри GCE, а не с OpenVPN.

Я сделал все шаги из другого урока, о настройка VPN с OpenVPN на Debian, Я могу подключиться к VPN с клиента, но тогда я не могу открывать подключения (даже не могу пинговать Google). На сервере могу пинговать и скачивать все как обычно.

У меня есть VPN на Linode с такой же настройкой, и он отлично работает. Итак, проблема заключается в сетевой маршрутизации GCE или правилах брандмауэра.

Перепробовал много вариантов, но ничего не работает. Пожалуйста, посмотрите настройки и подскажите, что мне изменить.

// строки конфигурации удалены, потому что проблема решена //

Прежде всего, спасибо @Shivox за его ответ.

И вот краткое руководство:

  • Я рекомендую вам создать дополнительную сеть (см. Вкладку «Сети»). В настройках сети добавьте разрешающие правила для: tcp: 22 (если не существует), tcp: 9700, tcp:17619. 17619 вот переменная - измените ее на любой понравившийся порт (диапазон 9075-65534). Вам нужно всего 3 правила и 2 маршрута по умолчанию, ничего больше.
  • Перейдите в «Создать экземпляр Compute Engine», нажмите «Показать дополнительные параметры», разрешите перенаправление портов, выберите расположение сервера.
  • Теперь (когда вы выбрали местоположение) добавьте статический IP к серверу.
  • Выберите образ Ubuntu 14.04 (именно эту версию).
  • Создать экземпляр
  • Подключиться через SSH (самый простой способ - использовать инструмент в браузере с панели GCE)
  • 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 как имя пользователя и пароль
  • Теперь измените имя пользователя и пароль администратора
  • Добавьте организацию, затем 2 пользователей (для настольных компьютеров и мобильных устройств)
  • На вкладке «Серверы» нажмите «Добавить сервер».
  • Используйте номер порта из первого шага (17619 в качестве примера) и протокол TCP.
  • Присоединить организацию к серверу
  • Запустить сервер
  • Во вкладке «Пользователи» загрузите ключи для обоих пользователей (tar-архивы с файлами ovpn внутри).

Я использую 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