เซิร์ฟเวอร์ VPN ใน Google Compute Engine พร้อม OpenVPN


13

ฉันพยายามใช้เซิร์ฟเวอร์ Google Compute Engine เป็นเซิร์ฟเวอร์ VPN สำหรับการรับส่งข้อมูลทั้งหมดของฉัน (ฉันอาศัยอยู่ในรัสเซียเรามีปัญหาบางอย่างกับการเซ็นเซอร์ที่นี่)

มี mini-tutorial เกี่ยวกับVPN ใน GCEแต่เป็นเรื่องเกี่ยวกับเครือข่ายระหว่าง 2 เซิร์ฟเวอร์ใน GCE และไม่ใช่ OpenVPN

ฉันทำทุกขั้นตอนจากบทช่วยสอนอื่นเกี่ยวกับการตั้งค่า VPN ด้วย OpenVPN บน Debianฉันสามารถเชื่อมต่อ VPN จากไคลเอนต์ได้ แต่จากนั้นฉันไม่สามารถเปิดการเชื่อมต่อได้ (ไม่สามารถแม้แต่ปิง google) บนเซิร์ฟเวอร์ฉันสามารถ ping และดาวน์โหลดทุกอย่างตามปกติ

ฉันมี VPN บน Linode ด้วยการตั้งค่าเดียวกันและใช้งานได้ดี ดังนั้นปัญหาอยู่ในกฎการกำหนดเส้นทางเครือข่าย GCE หรือไฟร์วอลล์

ฉันได้ลองชุดตัวเลือกมากมาย แต่ไม่มีอะไรทำงาน โปรดดูการตั้งค่าและบอกฉันว่าฉันควรเปลี่ยน

// // config lines ถูกลบเนื่องจากปัญหาได้รับการแก้ไข //


มีวิธีการเปิดใช้งานการส่งต่อไอพีหรือไม่? echo 1> / proc / sys / net / ipv4 / ip_forward
Alec Istomin

@AlecIstomin ใช่เสร็จแล้ว ฉันมี VPN บน Linode ด้วยการตั้งค่าเดียวกันและใช้งานได้ดี ดังนั้นปัญหาอยู่ในกฎการกำหนดเส้นทางเครือข่าย GCE หรือไฟร์วอลล์
OZ_

อาจถามฝ่ายสนับสนุน GCE? ดูเหมือนว่าสิ่งที่พวกเขาสามารถตอบได้อย่างรวดเร็ว
Bill Weiss

ราคา @BillWeiss สำหรับแผนการสนับสนุนของพวกเขาเริ่มต้นที่ $ 150 / เดือน แต่หากปัญหานี้ไม่ได้รับการแก้ไขในสัปดาห์ที่ฉันคิดว่าฉันจะจ่าย นอกจากนี้ฉันจะพยายามหาคนใน oDesk เพื่อแก้ไขและจากนั้นจะเขียนบทช่วยสอนในบล็อกของฉัน
OZ_

odesk.com/jobs/~01c4b1438a64f31fdd - อย่าลังเลที่จะสมัครถ้าคุณสามารถช่วยได้
OZ_

คำตอบ:


7

แรกของทุกขอบคุณ @Shivox เขาคำตอบ

และนี่คือวิธีการอย่างรวดเร็ว:

  • ผมขอแนะนำให้คุณสร้างเครือข่ายเพิ่มเติม (ดูแท็บ "เครือข่าย" ") การตั้งค่าในเครือข่ายเพิ่มกฎเพื่อให้สามารถ: TCP: 22 (ถ้าไม่ได้อยู่), TCP: 9700, TCP:. 17619 . 17619นี่เป็นตัวแปร - เปลี่ยนแปลงใด ๆ พอร์ตที่คุณชอบ (ช่วงคือ 9075-65534) คุณต้องการเพียง 3 กฎและ 2 เส้นทางเริ่มต้นเท่านั้น
  • ไปที่ "สร้างเครื่องมือคำนวณอินสแตนซ์" คลิก "แสดงตัวเลือกขั้นสูง" อนุญาตให้ส่งต่อพอร์ตเลือกตำแหน่งที่ตั้งของเซิร์ฟเวอร์
  • ตอนนี้ (เมื่อคุณเลือกที่ตั้ง) ให้เพิ่ม 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
  • สำหรับคำถามเกี่ยวกับ DB ให้คลิก "บันทึก"
  • ในหน้าต่างเข้าสู่ระบบใช้pritunlเป็นชื่อผู้ใช้และรหัสผ่าน
  • ตอนนี้เปลี่ยนชื่อผู้ใช้และรหัสผ่านของผู้ใช้ผู้ดูแลระบบ
  • เพิ่มองค์กรจากนั้นเป็นผู้ใช้ 2 คน (สำหรับเดสก์ท็อปและมือถือ)
  • คลิก "เพิ่มเซิร์ฟเวอร์" ในแท็บ "เซิร์ฟเวอร์"
  • ใช้หมายเลขพอร์ตจากขั้นตอนแรก ( 17619เป็นตัวอย่าง) และโปรโตคอล tcp
  • แนบองค์กรกับเซิร์ฟเวอร์
  • เริ่มเซิร์ฟเวอร์
  • ในคีย์ "แท็บผู้ใช้" ดาวน์โหลดสำหรับผู้ใช้ทั้งสอง (tar เก็บถาวรด้วยไฟล์ ovpn ภายใน)

ฉันใช้ความหนืดสำหรับ OS X และ OpenVPN เชื่อมต่อกับ iOS เป็นไคลเอนต์ ในความหนืดให้เปิดตัวเลือก "ส่งทราฟฟิกทั้งหมดผ่านการเชื่อมต่อ VPN" ในแท็บ "เครือข่าย"


ที่ควรทราบ: แพลตฟอร์ม Google Cloud ให้ทดลองใช้ฟรีกับ $ 300 เป็นเวลา 60 วัน
OZ_

1
ความตั้งใจที่จะติดตั้ง Pritunl บน Ubuntu 14.04 เปลี่ยนแปลงแล้ว: github.com/pritunl/pritunl#ubuntu-trusty
motobói

6

คุณสามารถแก้ปัญหาการไม่สามารถเรียกดูเว็บผ่าน VPN แม้จะสามารถ ping, traceroute ... โดยหนึ่งในสองวิธีต่อไปนี้:

ก่อนอื่นคุณสามารถใช้โปรโตคอล TCP แทน UDP โดยเปลี่ยน 'proto udp' เป็น 'proto tcp' ในทั้งไคลเอนต์และไฟล์เซิร์ฟเวอร์ conf

ประการที่สองคุณสามารถใช้อุปกรณ์ประปาแทน tun โดยเปลี่ยน 'dev tun' เป็น 'dev tap' ในไฟล์ไคลเอนต์และเซิร์ฟเวอร์ conf

ไม่แน่ใจว่าปัญหาคืออะไรดูเหมือนว่าเป็นปัญหาจากจุดสิ้นสุดของ 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 ใช้งานไม่ได้ตามที่คาดไว้ ฉันสามารถแก้ไขที่อยู่ ping โฮสต์อินเทอร์เน็ตบางแห่งและทำการติดตามอย่างสมบูรณ์ขณะเชื่อมต่อกับ VPN อย่างไรก็ตามเมื่อฉันเปิดเบราว์เซอร์และนำทางไปยังไซต์การเชื่อมต่อนั้นช้ามาก ฉันไม่รู้ว่าจะมีผลต่อการเชื่อมต่ออย่างไร แต่เป็นปัญหาที่แปลกจริงๆ

บางทีใครบางคนจาก Google สามารถช่วยให้เรารู้ว่าเกิดอะไรขึ้น

ปล. 1. ตามที่คนอื่นเคยแนะนำมาก่อนคุณสามารถตรวจสอบได้ว่าการส่งต่อไอพีนั้นเปิดใช้งานหรือไม่ สำหรับฉันวิธีเดียวที่จะมั่นใจว่าค่าสำหรับ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

ปล. 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_ ดีใจที่ได้ยินว่าคุณสามารถ ping และ traceroute ได้ในขณะที่เชื่อมต่อกับ VPN ตอนนี้คุณสามารถโพสต์ผลลัพธ์ของหนึ่งใน traceroute ของคุณได้หรือไม่ ฉันอยากรู้เกี่ยวกับบรรทัดแรกของผลลัพธ์เพราะดูเหมือนว่าแพ็กเกจจะถูกส่งเป็นวงวนอย่างน้อย 8 ครั้งแรก (ไม่ใช่ผู้เชี่ยวชาญด้านเครือข่าย)
Mario

ขออภัยนี่มันคือ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 cloud มิฉะนั้นแพ็คเก็ตจะไม่เข้าถึง VM ของคุณ หมายเหตุสิ่งนี้แยกจากnet.ipv4.ip_forward = 1ที่คุณสามารถตั้งค่าใน VM ของคุณ

การส่งต่อ 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 Subnet (เช่น 10.8.0.0/24) ที่ Console

2) ฉันขอแนะนำให้คุณเพิ่ม Masquerade ในเครือข่ายของคุณ

firewall-cmd --zone=trusted --add-masquerade --permanent
firewall-cmd --reload-all

3) อย่าลืมเปิดใช้งานการกำหนดเส้นทางแพ็คเก็ตในเคอร์เนล

ก) หนึ่งครั้ง

 echo 1 > /proc/sys/net/ipv4/ip_forward

b) ตลอดไปใน / etc / sysctl.conf:

 net.ipv4.ip_forward = 1
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.