ฉันมีเครือข่ายที่กำหนดค่าไว้: เราเตอร์และ RPI ที่ทำหน้าที่เป็นจุดเชื่อมต่อ wifi, เซิร์ฟเวอร์ dhcp และ dns, ไฟร์วอลล์และเกตเวย์ RPI ยังเชื่อมต่อกับไคลเอนต์ OpenVpn กับบริการ VPN แบบชำระเงิน (NordVPN) ดังนั้นไคลเอนต์ WiFi ทั้งหมดจึงใช้การเชื่อมต่อ VPN

ฉันกำลังพยายามสร้าง VPN ส่วนตัวเพื่อให้สามารถเชื่อมต่อกับ RPI จากภายนอกได้ ฉันเรียกใช้เซิร์ฟเวอร์ VPN บน RPI สำหรับการใช้งานนี้ NordVPN ไม่มีการส่งต่อพอร์ต ดังนั้นฉันจึงไม่สามารถเชื่อมต่อกับ RPI ผ่านที่อยู่ IP ของ NordVPN และฉันพยายามเข้าถึง RPI จาก IP สาธารณะของ ISP ฉันกำหนดค่าการส่งต่อพอร์ตจากเราเตอร์ไปยังที่อยู่ IP ในเครื่อง RPI

ฉันสามารถเชื่อมต่อกับ VPN ส่วนตัวกับ RPI ได้เมื่อการเชื่อมต่อ NordVPN ปิดอยู่ แต่ฉันไม่สามารถเชื่อมต่อได้เมื่อการเชื่อมต่อ NordVPN กำลังทำงาน

ฉันอ่านว่าปัญหาคือการกำหนดเส้นทางดังนั้นฉันจึงกำหนดค่าและผลลัพธ์สูงสุดคือฉันสามารถทำ SSH จากภายนอกไปยัง RPI เมื่อการเชื่อมต่อ NordVPN ทำงาน แต่ฉันไม่สามารถเชื่อมต่อกับไคลเอนต์ OpenVPN ของฉันได้ (เมื่อใช้งาน NordVPN) . ปัญหาคือลูกค้าและเซิร์ฟเวอร์ไม่จับมือกันจนเสร็จ เซิร์ฟเวอร์ได้รับแพ็กเก็ตแรก (ฉันคิดว่าไฟร์วอลล์อาจใช้ได้) แต่ไม่สามารถตอบกลับได้ (หรือส่งผ่านเส้นทางที่ไม่ถูกต้อง) แต่ดูเหมือนว่าปัญหานี้จะไม่มีการเชื่อมต่อ SSH เนื่องจากใช้งานได้ (และฉันเดาว่าเซิร์ฟเวอร์ตอบกลับการจับมือของลูกค้า)

ข้อมูลอื่นๆ:

  • 192.168.4.0/24 เป็นเครือข่ายของไคลเอ็นต์ท้องถิ่น (wifi ของ rpi)
  • 192.168.1.0/24 เป็นเครือข่ายของเราเตอร์ท้องถิ่น
  • 192.168.1.1 คือเราเตอร์
  • 192.168.1.117 คือ RPI eht0
  • 10.8.0.0/16 เป็นเครือข่าย NordVPN tun0
  • VPN แบบชำระเงินทำงานบนพอร์ต OpenVPN มาตรฐาน แต่ VPN ส่วนตัวทำงานบนพอร์ตอื่น

ครั้งแรกต่อไปที่นี่ผมพยายามที่จะส่งต่อจากเราเตอร์เพื่อ 192.168.1.117 กับเส้นทางเหล่านี้บน RPI

ip rule add fwmark 65 table novpn
ip route add default via 192.168.1.1 dev eth0 table novpn
iptables -t mangle -A OUTPUT -p udp --sport 1234567 -j MARK --set-mark 65

ในกรณีนี้ ฉันสามารถเชื่อมต่อผ่าน VPN ส่วนตัวได้โดยไม่ต้องใช้ NordVPN

ประการที่สองต่อไปนี้ที่นี่ผมสร้างอินเตอร์เฟซที่ eth0 เสมือน (192.168.1.118) ฉันส่งต่อจากเราเตอร์ไปยังที่อยู่ใหม่นี้ และกำหนดค่าเส้นทางดังนี้:

ip addr add 192.168.1.118 dev eth0:0
ip rule add from 192.168.1.118 table 1234
ip route add default via 192.168.1.1 dev eth0:0 table 1234

ดังนั้นฉันจึงสามารถเชื่อมต่อผ่าน SSH จากภายนอกได้เช่นกัน เมื่อการเชื่อมต่อ NordVPN ทำงานอยู่ แต่เมื่อฉันเปิดไคลเอนต์ VPN ส่วนตัว ข้อผิดพลาดเหล่านี้จะไม่สามารถจับมือกันได้:

XXX.XXX.XXX.XXX:53347 TLS: Initial packet from [AF_INET]XXX.XXX.XXX.XXX:53347, sid=5138c564 319ce197
Dec 08 23:02:55 rpi ovpn-server[19950]: XXX.XXX.XXX.XXX:53347 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
Dec 08 23:02:55 rpi ovpn-server[19950]: XXX.XXX.XXX.XXX:53347 TLS Error: TLS handshake failed

ฉันพบปัญหานี้ตั้งแต่ 2 สัปดาห์และฉันไม่มีความคิดอื่นใด อาจจะมีคนช่วยฉันได้บ้าง

ขอบคุณล่วงหน้า.

PS: ฉันไม่ได้เขียนกฎ iptables ของฉันเพราะมีจำนวนมาก

UPDATE: นี่คือเซิร์ฟเวอร์ของฉัน.conf

dev tun
proto udp
port PORT
ca /etc/openvpn/easy-rsa/pki/ca.crt
cert /etc/openvpn/easy-rsa/pki/issued/XXX.crt
key /etc/openvpn/easy-rsa/pki/private/XXX.key
dh none
topology subnet
server 10.35.0.0 255.255.255.0
# Set your primary domain name server address for clients
push "dhcp-option DNS 1.1.1.1"
push "dhcp-option DNS 1.0.0.1"
# Prevent DNS leaks on Windows
push "block-outside-dns"
# Override the Client default gateway by using 0.0.0.0/1 and
# 128.0.0.0/1 rather than 0.0.0.0/0. This has the benefit of
# overriding but not wiping out the original default gateway.
push "redirect-gateway def1"
client-to-client
keepalive 1800 3600
remote-cert-tls client
tls-version-min 1.2
tls-crypt /etc/openvpn/easy-rsa/pki/ta.key
cipher AES-256-CBC
auth SHA256
user nobody
group nogroup
persist-key
persist-tun
crl-verify /etc/openvpn/crl.pem
status /var/log/openvpn-status.log 20
status-version 3
syslog
verb 3
#DuplicateCNs allow access control on a less-granular, per user basis.
#Remove # if you will manage access by user instead of device. 
#duplicate-cn
# Generated for use by PiVPN.io

และนี่คือคอนเฟอเรนซ์ไคลเอนต์ส่วนตัว

client
dev tun
proto udp
remote ISP_IP PORT
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
tls-version-min 1.2
verify-x509-name XXX name
cipher AES-256-CBC
auth SHA256
auth-nocache
verb 3

นี่คือเส้นทางของฉัน:

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.8.0.1        128.0.0.0       UG    0      0        0 tun0
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth0
10.8.0.0        0.0.0.0         255.255.255.0   U     0      0        0 tun0
10.35.0.0       0.0.0.0         255.255.255.0   U     0      0        0 tun1
128.0.0.0       10.8.0.1        128.0.0.0       UG    0      0        0 tun0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.4.0     0.0.0.0         255.255.255.0   U     0      0        0 wlan0
NORDVPN_GW      192.168.1.1     255.255.255.255 UGH   0      0        0 eth0

อัปเดต 2:

โทโพโลยีเครือข่ายคือ:

ไคลเอนต์ LAN ไร้สาย (192.168.4.X) -> RPI (eth0 192.168.1.117, wlan0 192.168.4.1, tun0 ไคลเอนต์ NordVpn 10.8.0.0/16, tun1 10.35.0.1 เซิร์ฟเวอร์ OpenVpn) -> ROUTER (192.168.1.1) -> อินเทอร์เน็ต

สิ่งที่ฉันต้องการจะทำ:

ไคลเอนต์ OPENVPN (10.35.0.2) -> อินเทอร์เน็ต -> เราเตอร์ -> RPI

answer

ฉันแก้

ปัญหาในกรณีนี้คือบรรทัดนี้หายไปในการกำหนดค่าเซิร์ฟเวอร์ OpenVPN

local 192.168.1.117

ดังนั้นการกำหนดเส้นทางที่ถูกต้องสำหรับฉันคือ:

ip rule add from 192.168.1.117 table novpn
ip route add default via 192.168.1.1 dev eth0 table novpn