ฉันได้ติดตั้ง OpenVPN บน Raspberry PI (เซิร์ฟเวอร์: 192.168.0.2) และบนแล็ปท็อป Ubuntu ของฉัน (ไคลเอนต์: 192.168.0.3) เครื่องทั้งสองเชื่อมต่อกับเครือข่ายไร้สายเดียวกันและมีที่อยู่ที่กำหนดโดย DHCP จากเราเตอร์ไร้สายที่ 192.168.0.1 อย่างไรก็ตามเมื่อ VPN เริ่มต้นฉันไม่สามารถเข้าถึงอินเทอร์เน็ตจากไคลเอนต์ได้
เมื่อฉันเริ่ม OpenVPN บนเซิร์ฟเวอร์ (ด้วยตัวเลือกต่อไปนี้) ดูเหมือนว่าจะเริ่มต้นอย่างถูกต้อง
port 1194
proto udp
dev tun
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key
dh /etc/openvpn/keys/dh2048.pem
cipher AES-256-CBC
auth SHA512
topology subnet
server 10.8.0.0 255.255.255.0
push "dhcp-option DNS 8.8.8.8"
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3
เมื่อฉันเริ่ม OpenVPN บนไคลเอนต์ (ด้วยตัวเลือกต่อไปนี้) มันก็ดูเหมือนจะเริ่มต้นอย่างถูกต้อง
ca keys/ca.crt
cert keys/client-no-pass.crt
key keys/client-no-pass.key
remote 192.168.0.2 1194
comp-lzo
client
dev tun
redirect-gateway local
remote-cert-tls server
cipher AES-256-CBC
auth SHA512
proto udp
resolv-retry infinite
nobind
persist-key
persist-tun
verb 3
mute 20
บนไคลเอนต์ฉันจะเห็นว่าตารางการกำหนดเส้นทาง IP ของฉันได้รับการจัดการให้ใช้ที่อยู่ IP ของเซิร์ฟเวอร์ VPN เป็นเส้นทางเริ่มต้นและการรับส่งข้อมูลทั้งหมดไปยังเครือข่าย VPN จะถูกจัดหาด้วยที่อยู่ IP ของ tun0 เท่ากับ 10.8.0.4
me@client:~$ ip route
default via 10.8.0.1 dev tun0
10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.4
169.254.0.0/16 dev wlp4s0 scope link metric 1000
192.168.0.0/24 dev wlp4s0 proto kernel scope link src 192.168.0.3 metric 600
เมื่อ VPN ถูกตัดการเชื่อมต่อฉันสามารถ ping 8.8.8.8 (เซิร์ฟเวอร์ DNS) เมื่อเชื่อมต่อ VPN ฉันไม่สามารถทำได้
หลังจากค้นหา Google ฉันพยายามเพิ่มสิ่งนี้บนเซิร์ฟเวอร์ แต่ไม่ช่วย:
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o wlan0 -j SNAT --to-source 192.168.0.2
ผมทำอะไรผิดหรือเปล่า? ฉันจะแก้ไขได้อย่างไร สถานการณ์ WLAN VPN ในพื้นที่ของฉันไม่รองรับหรือไม่ ฉันได้ลองใช้ Wireshark เพื่อรับปริมาณการใช้งาน tun0 จากลูกค้า แต่ไม่สามารถแก้ไขปัญหาได้
แก้ไข: ข้อมูลเพิ่มเติม :
ที่อยู่ IP ของเซิร์ฟเวอร์คือ "สงวน" (ตามที่อยู่ MAC) เพื่อให้เราเตอร์กำหนดที่อยู่เดียวกันเสมอ
192.168.0.2
เซิร์ฟเวอร์ได้รับการกำหนดค่า (โดยวิธีการแก้ไข
/etc/sysctl.conf
) เพื่อส่งต่อแพ็กเก็ต IPV4 และสิ่งนี้ได้รับการทดสอบโดยการรันcat /proc/sys/net/ipv4/ip_forward
(ส่งคืน 1)ตารางการเราต์เซิร์ฟเวอร์แสดงสิ่งนี้:
me @ server: ~ $ ip เส้นทาง เริ่มต้นผ่าน 192.168.0.1 dev wlan0 เมตริก 303 10.8.0.0/24 dev tun0 proto เคอร์เนลขอบเขตลิงก์ src 10.8.0.1 192.168.0.0/24 dev wlan0 การเชื่อมโยงขอบเขตเคอร์เนลโปรโต src 192.168.0.2 เมตริก 303
- ไฟร์วอลล์ของเซิร์ฟเวอร์มีลักษณะดังนี้:
ฉัน @ เซิร์ฟเวอร์: ~ $ sudo iptables -S -P ยอมรับการยอมรับ -P ไปข้างหน้ายอมรับ -P OUTPUT ACCEPT -A ไปข้างหน้า -m conntrack - สถานะที่เกี่ยวข้องก่อตั้งขึ้น -j ยอมรับ -A ไปข้างหน้า -s 10.8.0.0/24 -i tun0 -o wlan0 -m conntrack - รัฐใหม่ -j ยอมรับ me @ server: ~ $ sudo iptables -t nat -S การยอมรับ PR-P -P ยอมรับการยอมรับ -P OUTPUT ACCEPT ยอมรับการโพสต์ -P -A POSTROUTING -s 10.8.0.0/24 -o wlan0 -j MASQUERADE
-j MASQUERADE
ในกฎ POSTROUTING