Score:0

OpenVPN: Can't route to private network once connected to VPN tunnel

ธง cm

I'm trying to setup an OpenVPN server to allow tunnelling to a private network (192.168.0.0/16) but when my VPN client is connected it cannot reach hosts on this network. No firewall is currently setup for the network/all ports are open. The server running OpenVPN is assigned the IP 192.168.0.2 on the private network

server.conf

local 1.2.3.4
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh.pem
auth SHA512
tls-crypt tc.key
topology subnet
server 10.8.0.0 255.255.255.0
server-ipv6 fddd:1194:1194:1194::/64
push "redirect-gateway def1 ipv6 bypass-dhcp"
push "route 192.168.0.0 255.255.0.0"
push "dhcp-option DNS 10.8.0.1"
ifconfig-pool-persist ipp.txt
keepalive 10 120
cipher AES-256-CBC
user nobody
group nogroup
persist-key
persist-tun
verb 3
crl-verify crl.pem
explicit-exit-notify

client.ovpn

client
dev tun
proto udp
remote 1.2.3.4 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
auth SHA512
cipher AES-256-CBC
ignore-unknown-option block-outside-dns
block-outside-dns
verb 3
<ca>
REDACTED
</ca>
<cert>
REDACTED
</cert>
<key>
REDACTED
</key>
<tls-crypt>
REDACTED
</tls-crypt>

Client connected to the OpenVPN server can ping the OpenVPN gateway as well as using its IP on the other subnet. However it can't ping a different host on the same network...

[26/10/21 19:58:32] user@client:~$ ping 10.8.0.1
PING 10.8.0.1 (10.8.0.1) 56(84) bytes of data.
64 bytes from 10.8.0.1: icmp_seq=1 ttl=64 time=27.3 ms
^C
--- 10.8.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 27.276/27.276/27.276/0.000 ms
[26/10/21 19:58:49] user@client:~$ ping 192.168.0.2
PING 192.168.0.2 (192.168.0.2) 56(84) bytes of data.
64 bytes from 192.168.0.2: icmp_seq=1 ttl=64 time=27.3 ms
^C
--- 192.168.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 27.271/27.271/27.271/0.000 ms
[26/10/21 19:58:52] user@client:~$ ping 192.168.0.3
PING 192.168.0.3 (192.168.0.3) 56(84) bytes of data.
^C
--- 192.168.0.3 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

OpenVPN server can ping a different host on the same network...

root@server:~# ping 192.168.0.3
PING 192.168.0.3 (192.168.0.3) 56(84) bytes of data.
64 bytes from 192.168.0.3: icmp_seq=1 ttl=63 time=1.26 ms
^C
--- 192.168.0.3 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1.262/1.262/1.262/0.000 ms

OpenVPN server route table...

root@server:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         172.31.1.1      0.0.0.0         UG    100    0        0 eth0
10.8.0.0        0.0.0.0         255.255.255.0   U     0      0        0 tun0
172.31.1.1      0.0.0.0         255.255.255.255 UH    100    0        0 eth0
192.168.0.0     192.168.0.1     255.255.255.0   UG    0      0        0 ens10
192.168.0.1     0.0.0.0         255.255.255.255 UH    0      0        0 ens10

192.168.0.3 routing table...

root@server:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         _gateway        0.0.0.0         UG    100    0        0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
_gateway        0.0.0.0         255.255.255.255 UH    100    0        0 eth0
192.168.0.0     192.168.0.1     255.255.0.0     UG    0      0        0 ens10
192.168.0.1     0.0.0.0         255.255.255.255 UH    0      0        0 ens10

Any help is appreciated.

Thanks.

Nikita Kipriyanov avatar
za flag
โปรดแสดงเส้นทางบนโฮสต์อื่นที่ไม่ใช่ `192.168.0.2` แสดงตารางเส้นทางบนระบบซึ่งตั้งค่าเป็นเกตเวย์เริ่มต้นของโฮสต์เหล่านั้นด้วย (อาจเป็น `192.168.0.1`) นอกจากนี้ *อย่าใช้ `route`* เพราะมันโบราณ ทำให้เข้าใจผิด และอ่านยากจริงๆ ลบ `net-tools ' ทันที (อย่างไรก็ตาม Debian 10 และ 11 เป็นค่าเริ่มต้นอยู่แล้วหากไม่มีแพ็กเก็ตนี้ ดังนั้นจึงไม่จำเป็นอย่างแน่นอน) ใช้ `ip route` และคุณสมบัติ `iproute2` อื่นๆ เสมอ ซึ่งเป็นวิธีที่เหมาะสมในการกำหนดค่าและทำงานกับสแต็กเครือข่าย Linux "สมัยใหม่" (ประมาณปี 2000)
Nikita Kipriyanov avatar
za flag
ฉันจะทำลายความคิด: ฉันสงสัยว่าไม่มีอะไรผิดปกติกับเส้นทางจาก 10.8.x.x ถึง 192.168.0.x แต่มีปัญหาบางอย่างในทิศทางตรงกันข้าม เป็นแพ็กเก็ตย้อนกลับที่ไม่สามารถส่งได้ไม่ใช่ส่งต่อ
Mark Hingston avatar
cm flag
ขอบคุณ @NikitaKipriyanov ฉันได้อัปเดตคำถามด้วยตารางเส้นทางสำหรับ 192.168.0.3 แล้ว ประเด็นเกี่ยวกับการใช้ `ip route` ฉันไม่แน่ใจว่าจะทำอย่างไรเกี่ยวกับการอัปเดตตารางเส้นทางสำหรับโฮสต์บน LAN สำหรับการกำหนดค่านี้
Nikita Kipriyanov avatar
za flag
โดยทั่วไป คุณเรียกใช้บริการ VPN *บนเราเตอร์* ซึ่งเป็นเกตเวย์เริ่มต้นสำหรับ LAN บางตัว เป็นต้น หรือบนเราเตอร์อื่น แต่สิ่งที่เป็นเกตเวย์ควรมีเส้นทางเฉพาะไปยัง VPN ผ่าน // และคุณยังคงใช้เส้นทางฆ่านิสัยนี้ด้วยไฟ มันเลวร้ายยิ่งกว่าการสูบบุหรี่ อย่างจริงจัง Docker จะเป็นไปไม่ได้หากไม่มีฟังก์ชันของ `ip route` เนื่องจากยูทิลิตี้ `route` ไม่รู้อะไรเกี่ยวกับเนมสเปซซึ่ง Docker สร้างขึ้น ifconfig, route, iptunnel, tunctl, brctl, vconfig â ทั้งหมดเหล่านี้ถูกแทนที่และไม่ควรใช้อีกต่อไป
Score:1
ธง bq

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

ดังที่ @Nikita ชี้ให้เห็นและผลลัพธ์ของ เส้นทาง(8) รายการเจ้าภาพชอบ 192.168.0.3 (และอาจรวมถึงโฮสต์อื่นๆ บนเครือข่ายของคุณด้วย) รู้เพียงว่าจะส่งแพ็กเก็ตไปยังเราเตอร์ของคุณที่ 192.168.0.1. พวกเขาไม่มีอะไรจะบอกให้ส่งแพ็กเก็ตไปยังระบบ OpenVPN ของคุณที่ 192.168.0.2.. ดังนั้น .3 และเพื่อนจะส่งการรับส่งข้อมูลทั้งหมดไปยังเราเตอร์ของคุณ เราเตอร์ของคุณไม่รู้จัก VPN ของคุณ เราเตอร์ของคุณจะทิ้งแพ็คเก็ตหรือส่งไปยังอินเทอร์เน็ตสาธารณะ

วิธีแก้ปัญหาที่เป็นไปได้หลายอย่าง

โซลูชัน #1 - ง่ายแต่ไม่มีประสิทธิภาพ

บอกเราเตอร์ของคุณว่า 10.8.0.0/24 สามารถเข้าถึงได้ผ่านทางเกตเวย์ที่ 192.168.0.2. ซึ่งจะส่งผลให้เกิดเส้นทางกิ๊บ -- แพ็กเก็ตจะไปจากโฮสต์เช่น .3ไปยังอินเทอร์เฟซ LAN ของเราเตอร์ของคุณที่ .1แล้วสำรองอินเทอร์เฟซเราเตอร์เดิมและเกตเวย์ OpenVPN ที่ .2. สิ่งนี้ไม่มีประสิทธิภาพ แต่ควรใช้งานได้

คุณไม่ได้บอกว่าเราเตอร์ของคุณคืออะไร แต่ถ้าเป็น Linux คำสั่งจะเป็นดังนี้:

เส้นทาง ip เพิ่ม 10.8.0.0/24 ผ่าน 192.168.0.2

โซลูชัน # 2 - ไม่ล่วงล้ำ แต่น่าเบื่อ

คุณสามารถกำหนดค่าเส้นทางแบบสแตติกในแต่ละโฮสต์ของ LAN โดยบอกรายละเอียดการกำหนดเส้นทางแบบเดียวกับ #1 แต่ทุกที่ นี่อาจเป็นปัญหาเล็กน้อยในการกำหนดค่าและบำรุงรักษา แต่จะเป็นโซลูชันที่มีประสิทธิภาพสูงสุดที่ช่วยรักษาโทโพโลยีเครือข่ายที่คุณมีอยู่ คำสั่งเดียวกับด้านบน (สำหรับ Linux) แต่คุณต้องรันบนโฮสต์ LAN ทุกโฮสต์ คุณต้องทำบนอุปกรณ์อื่น ๆ ทั้งหมดที่ควรจะทำงานผ่าน VPN รวมถึงกล่อง Windows, เครื่องพิมพ์, แท็บเล็ต, โทรศัพท์, หลอดไฟ wifi ฯลฯ ในที่สุดคุณจะลืมสิ่งหนึ่งและสงสัยว่าทำไมมันใช้งานไม่ได้ ใช้เวลาดึง ผมของคุณออกแล้วรู้สึกเหมือนเป็นยาเสพติดเมื่อคุณจำได้ว่าทำไม

โซลูชัน #3 - ซับซ้อนแต่ก่อกวน

คุณสามารถวางเกตเวย์ VPN บนเส้นทางการกำหนดเส้นทางไปยังอินเทอร์เน็ต มีสองทางเลือกย่อยที่นี่

โซลูชัน #3A - VPN บนเราเตอร์

แม้แต่เราเตอร์ของผู้บริโภคก็สามารถใช้งาน OpenVPN ได้ในบางครั้ง โดยเฉพาะอย่างยิ่งหากคุณใช้เฟิร์มแวร์ของบุคคลที่สาม (OpenWRT, DD-WRT เป็นต้น) อย่างไรก็ตามพวกเขามักจะขาดแรงม้าของ CPU เพื่อประสิทธิภาพที่เพียงพอ คุณยังสามารถแทนที่ผู้บริโภคด้วยสิ่งที่ดีกว่า เช่น เราเตอร์เชิงพาณิชย์หรือ Linux อื่น คุณอาจจะสามารถปรับเกตเวย์ VPN ของคุณใหม่เป็น VPN+เราเตอร์+ไฟร์วอลล์

ในสถานการณ์นี้ VPN และเราเตอร์คือสิ่งเดียวกัน คุณจึงไม่ต้องกังวลว่าเราเตอร์จะทำงานร่วมกับเกตเวย์ VPN ได้ นี่น่าจะมีประสิทธิภาพมากที่สุดในแง่ของการออกแบบเครือข่าย

โซลูชัน #3B - Stack Gateway และเราเตอร์

คุณสามารถวางเกตเวย์ VPN ระหว่างเราเตอร์และ LAN ที่เหลือ โดยมีซับเน็ต IP ต่างกันที่ด้านใดด้านหนึ่งของเกตเวย์ VPN โฮสต์ LAN อื่น ๆ ทั้งหมดส่งไปยังเกตเวย์ VPN เพื่อเข้าสู่อินเทอร์เน็ต เกตเวย์ VPN ส่งและส่งต่อไปยังเราเตอร์เพื่อเข้าสู่อินเทอร์เน็ต

การดำเนินการนี้จะต้องมีการใส่อินเทอร์เฟซเครือข่ายสองรายการในเกตเวย์ VPN หนึ่งรายการสำหรับ LAN และอีกรายการหนึ่งสำหรับแฮนด์ออฟไปยังเราเตอร์ (หรือทำกิ๊บเสต็ปบน VPN gateway ซึ่งแย่กว่า #1 เพราะตอนนี้ ทั้งหมด การจราจรทางอินเทอร์เน็ตกำลังยุ่งเหยิง)

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

Mark Hingston avatar
cm flag
มีประโยชน์มาก ขอบคุณ
Ben Scott avatar
bq flag
@MarkHingston: ฉันดีใจที่คุณพบว่าสิ่งนี้มีประโยชน์ หากคุณต้องการความช่วยเหลือเพิ่มเติม โปรดระบุรายละเอียดในความคิดเห็นและ/หรือแก้ไขคำถามของคุณ หากคุณคิดว่าคำถามของคุณได้รับการแก้ไขแล้ว โปรด[ยอมรับคำตอบ](https://stackoverflow.com/help/someone-answers)

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา