OpenVPN ไม่ใช่เกตเวย์เริ่มต้นสำหรับการรับส่งข้อมูลทั้งหมด


21

ฉันกำลังพยายามทำให้ลูกค้าของฉันส่งต่อปริมาณการใช้งานทั้งหมดผ่าน VPS ที่ใช้ OpenVPN อย่างที่คุณเห็นมันจะอนุญาตให้ส่ง Ping ไปยังทั้งโดเมนและที่อยู่ IP ดิบ แต่จะไม่อนุญาตการรับส่งข้อมูลเช่นนั้นผ่าน curl และ traceroute ไม่ได้เกิดอะไรขึ้น การรับส่งข้อมูลทำงานได้อย่างถูกต้องเมื่อไม่ได้เชื่อมต่อกับ VPN

ข้อมูลทั้งหมดอยู่ที่นี่: https://pastebin.com/tGspNefn

ขอขอบคุณ.

การตั้งค่าการทำงานต้องขอบคุณวิธีแก้ปัญหาด้านล่าง:

เซิร์ฟเวอร์:

port <integer>
proto udp
dev tun
ca ca.crt
cert vpnserver.crt
key vpnserver.key  # This file should be kept secret
dh dh4096.pem
tls-auth ta.key 0
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway autolocal"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
keepalive 10 120
cipher AES-256-CBC
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3

ลูกค้า:

client
dev tun
proto udp
remote x.x.x.x <port number>
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert vpnclient.crt
key vpnclient.key
tls-auth ta.key 1
ns-cert-type server
cipher AES-256-CBC
comp-lzo
verb 3

/sbin/route add -net 0.0.0.0 netmask 128.0.0.0 gw 10.8.0.5 ทำไม netmask 128.0.0.0
Antony Gibbs

ขอบคุณ DrDinosaur ที่ชี้serverfault.com/questions/312860/ …
แอนโทนีกิ๊บส์

3
ครั้งต่อไปจะดึงข้อมูลที่เกี่ยวข้องและรวมไว้ในคำถาม ตัวอย่าง Pastebin มีอายุการใช้งานที่ จำกัด
MLu

คำตอบ:


34

การแก้ปัญหามีสองส่วน:

1. เปลี่ยนเส้นทางการรับส่งข้อมูลทั้งหมดลงในอุโมงค์

ทางออกที่ง่ายที่สุด - ใช้--redirect-gateway autolocalตัวเลือกของ OpenVPN (หรือใส่ไว้ในไฟล์กำหนดค่าเป็นredirect-gateway autolocalเป็น

2. จัดการทราฟฟิกบนเซิร์ฟเวอร์ OpenVPN

ตอนนี้ทันเนลของทราฟฟิกทั้งหมดจะเข้าสู่อุโมงค์และผุดขึ้นที่ปลายสุดของเซิร์ฟเวอร์จากtun0อินเตอร์เฟส

คุณต้องกำหนดค่าสองสิ่งเพื่อให้ใช้งานได้:

เปิดใช้งานการส่งต่อแพ็กเก็ต

ตามค่าเริ่มต้นในการแจกแจงส่วนใหญ่การส่งต่อแพ็กเก็ตจะถูกปิดใช้งานดังนั้นแพ็กเก็ตจากช่องสัญญาณอินเทอร์เฟซจะไม่ส่งไปยังส่วนต่อประสานสาธารณะ คุณต้องเปิดใช้งานการส่งต่อด้วย:

~ # sysctl net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1

เมื่อทดสอบแล้วให้ทำการเปลี่ยนแปลงแบบถาวร /etc/sysctl.conf

ตรวจสอบให้แน่ใจiptablesด้วยว่าไม่ได้ปิดกั้นทราฟฟิกที่ส่งต่อ:

~ # iptables -I FORWARD -j ACCEPT

สิ่งนี้ดีพอสำหรับการทดสอบ - ในการใช้งานจริงคุณจะต้องทำให้กฎของไฟร์วอลล์มีความเฉพาะเจาะจงมากขึ้น แต่ก็ไม่อยู่ในขอบเขตที่นี่

ข NAT แพ็กเก็ตขาออกจากช่องสัญญาณ

เมื่อเปิดใช้งานการส่งต่อแพ็กเก็ตจะถูกส่งต่อโดยไม่มีการเปลี่ยนแปลงที่อยู่ต้นทางในกรณีของคุณ10.8.0.6แพ็กเก็ตดังกล่าวจะถูกทิ้งบนเกตเวย์ ISP หรือแม้ว่าพวกเขาจะทำให้มันไปยังปลายทาง ที่อยู่ส่วนตัวเหล่านี้ไม่สามารถกำหนดเส้นทางได้บนอินเทอร์เน็ต

การแก้ปัญหาคือ NAT การรับส่งข้อมูลออกเช่นแทนที่ที่10.8.0.6อยู่ส่วนตัวด้วย IP สาธารณะของเซิร์ฟเวอร์ VPN เพื่อให้มั่นใจว่าการตอบกลับไปถึงเซิร์ฟเวอร์ VPN และจะส่งต่อกลับไปยังอุโมงค์

~ # iptables -t nat -I POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

3. ทดสอบ

ตอนนี้ลองping 8.8.4.4จากไคลเอนต์ VPN ของคุณ คุณควรเห็นคำตอบ แจ้งให้เราทราบหากไม่ได้ :)


ตอนนี้ทำงานได้อย่างสมบูรณ์แบบ ขอบคุณมากสำหรับคำตอบที่มีคุณภาพสูง
DrDinosaur

ที่ฝั่งไคลเอ็นต์ให้เพิ่มการเพิ่มไฟล์เข้าไปในไฟล์ client.conf หรือหรือเพิ่มตัวเลือก --pull ในบรรทัดคำสั่งดังนั้นไคลเอนต์จะยอมรับการกำหนดค่าที่พุชโดยเซิร์ฟเวอร์ นอกจากนี้หากลูกค้าทำงานภายใต้ Windows Vista หรือปิดการใช้งาน UAC ที่ใหม่กว่ามิฉะนั้นบริการ openpn ที่ทำงานบนไคลเอนต์จะไม่สามารถกำหนดเส้นทางได้
Viktor

> b. NAT แพ็กเก็ตขาออกจากอุโมงค์ที่เป็นประโยชน์กับฉัน
FelikZ

พิจารณาว่ากฎ FORWARD -j ACCEPT ทำให้เซิร์ฟเวอร์เป็นเราเตอร์แบบเปิดระหว่างส่วนต่อประสานทั้งหมด ต้องไม่ใช้กับระบบการผลิต แต่สำหรับวิธีการที่จะทำให้มันทำงานเป็นพื้นฐานอย่างรวดเร็วเป็นชุดคำสั่งที่ดี
Sprinterfreak

ไม่Redirect all the traffic into the tunnelขั้นตอนในการตั้งค่าไคลเอ็นต์?
เครื่องบิน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.