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


13

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

Існує міні-посібник про VPN на GCE , але це стосується мережі між двома серверами всередині GCE, а не з OpenVPN.

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

У мене є VPN на Linode з тією ж установкою, і він працює чудово. Отже, проблема полягає в правилах маршрутизації мережі або брандмауеру GCE.

Я спробував багато варіантів, але нічого не працює. Будь ласка, подивіться налаштування та скажіть мені, що я повинен змінити.

// конфігураційні рядки видалено, оскільки проблема вирішена //


Чи є спосіб увімкнути пересилання ip? echo 1> / proc / sys / net / ipv4 / ip_forward
Alec

@AlecIstomin, так, це зроблено. У мене є VPN на Linode з тією ж установкою, і він працює чудово. Отже, проблема полягає в правилах маршрутизації мережі або брандмауеру GCE.
OZ_

Можливо, попросіть підтримку GCE? Це схоже на те, на що вони могли швидко відповісти.
Білл Вайс

@BillWeiss ціна на їхні плани підтримки починається від 150 доларів США на місяць, але якщо це питання не буде вирішено за тиждень, я думаю, я їм заплачу. Також я спробую знайти когось на oDesk, щоб виправити це, а потім напишу підручник у своєму блозі.
OZ_

odesk.com/jobs/~01c4b1438a64f31fdd - не соромтеся подати заявку, якщо ви можете допомогти, хлопці.
OZ_

Відповіді:


7

Перш за все, завдяки @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 всередині).

Я використовую Viscosity для OS X та OpenVPN для підключення iOS як клієнтів. У розділі В'язкість увімкніть опцію "Надіслати весь трафік через VPN-з'єднання" на вкладці "Мережа".


Зазначимо: Google Cloud Platform дає безкоштовну пробну версію з 300 доларів на 60 днів.
OZ_

1
Навчання до встановлення Pritunl на Ubuntu 14.04 змінили: github.com/pritunl/pritunl#ubuntu-trusty
motobói

6

Ви можете вирішити проблему неможливості перегляду Інтернету через VPN, незважаючи на те, що Ви можете пінг, простежити ... одним із двох наступних способів:

По-перше, ви можете використовувати протокол TCP замість UDP, змінивши "proto udp" на "proto tcp" як у клієнтських, так і у конфіденційних файлах сервера.

По-друге, ви можете використовувати тап-пристрій замість настройки, змінивши «dev tun» на «dev tap» як у файлах клієнта, так і у сервері.

Не впевнений, у чому проблема, але, здається, це проблема з кінця Google.


1
Ти мій герой! Велике спасибі! Перехід на TCP зробив свою справу. Я розкрию повне "як" до окремої відповіді. Та почуття, коли давня мрія збувається… Дякую!
OZ_

4

Пам'ятайте, що Google VPC скидає пакети, у яких є source_ipінший IP-код VM, що має зовнішній IP.

Цей документ https://cloud.google.com/compute/docs/vpc/advanced-vpc визначає:

Мережа VPC переписує заголовок IP, щоб оголосити зовнішню IP-адресу екземпляра як джерело. Якщо екземпляр не має зовнішньої IP-адреси, дзвінок заборонений, а мережа VPC скидає пакет, не повідомляючи про це відправника.

Отже, якщо ваш openVPN - це просто переадресація пакетів з іншої мережі, тоді пакети до загальнодоступних внутрішніх мереж будуть відкинуті, оскільки source_ipне відповідають жодному існуючому внутрішньому IP-адресу VM. З цієї причини вам потрібно NAT пакетів, що виходять з вашої локальної мережі, наприклад, на вашому 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 автоматично.


3

Це насправді не відповідь, але сайт не дозволив мені додати його як коментар до вашого питання.

Тим не менш, у мене майже та сама конфігурація, яку ви описали вище (я не налаштував 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>

@OZ_ Радий почути, що тепер ви можете пінг і простежити, підключившись до VPN. Тепер, чи можете ви опублікувати результат однієї із ваших трассеру ?. Мені цікаво про перші рядки виводу, тому що здається, що пакет направляється в цикл принаймні перші 8 стрибків (хоча я не експерт з мережі)
Маріо

вибачте, ось це: gist.github.com/jamm/028ae858a03e40495740 . І так, це виглядає дивно. Можливо, нам потрібен певний маршрут.
OZ_

1

Редагувати /etc/sysctl.confшляхом коментарів#net.ipv4.ip_forward=1

Це повинно дозволяти OpenVPN направляти ваш трафік.


Хороший підручник щодо його виконання за наступною URL-адресою: ducea.com/2006/08/01/how-to-enable-ip-forwarding-in-linux
MFT

про це згадувалося в першому коментарі serverfault.com/questions/590530/…
OZ_

1

Вам потрібно включити переадресацію IP для вашого примірника VM у хмарі google, інакше пакети не дотягнуться до вашої VM. Зауважте, це окремо від того, net.ipv4.ip_forward = 1яке ви можете встановити у своєму віртуальному комп'ютері.

Переадресація IP може бути встановлена ​​лише один раз перед створенням VM, і не може бути змінена після цього. Щоб увімкнути його для нового VM, натисніть Management, security, disks, networking, sole tenancy: введіть тут опис зображення

Потім на Networkingвкладці натисніть Network Interfaceта встановіть IP Forwarding на ON:

введіть тут опис зображення


0

Вам потрібно додати правило, яке дозволяє трафік для самого OpenVPN:

iptables -A INPUT -p udp --dport 1194 -j ACCEPT

існують як правило №4
OZ_

0

Про Мережу

1) Увімкніть увесь трафік із підмережі OpenVPN (наприклад, 10.8.0.0/24) на консолі

2) Я настійно пропоную вам додати Маскарад до своєї мережі

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.