ฉันกำลังพยายามตั้งค่าการเชื่อมต่อ OpenVPN กับสะพานอีเทอร์เน็ต Layer2 เพื่อเชื่อมสอง LAN ดูเหมือนว่าคำตอบ ARP จะไม่ถูกสร้างขึ้นอย่างถูกต้อง ...
โปรดทราบว่าฉันต้องการสร้างสะพาน Layer2 แบบเต็มเพื่อให้สามารถถ่ายทอดการรับส่งข้อมูลทั้งหมดรวมถึงแพ็กเก็ตออกอากาศได้ ฉันจะใช้ ebtables และวิธีอื่น ๆ เพื่อบล็อก DHCP เป็นต้น
Netork Topology
เรามี LAN สองแห่ง (เราจะเรียกพวกเขาว่า LAN1 และ LAN2) ในสถานที่จริง LAN แต่ละตัวเป็นเครือข่ายที่อยู่อาศัยมาตรฐานบนการเชื่อมต่ออินเทอร์เน็ตระดับผู้บริโภค
------------ --------- ---------- ------------------------ * Internet * --> * Modem * --> * Router * -> * Switches and Clients * ------------ --------- ---------- ------------------------
ในแต่ละเครือข่ายเราได้สร้างเซิร์ฟเวอร์ Linux ออกแบบมาเพื่อทำหน้าที่เป็นเซิร์ฟเวอร์สำรองข้อมูลและสะพาน VPN เซิร์ฟเวอร์ที่เรียกว่า Thing1 (บน LAN1) และ Thing2 (บน LAN2) เป็นอุปกรณ์ไคลเอ็นต์
LAN1 ใช้ 192.168.110.0/24
- เราเตอร์ 1 (ASUS RT-AC68U) เป็นเซิร์ฟเวอร์ DHCP และอินเทอร์เน็ตเกตเวย์ที่ 192.168.110.254
- สวิตช์และพีซีไคลเอนต์โทรศัพท์ทีวี ฯลฯ
- Thing1 (เซิร์ฟเวอร์ OpenVPN) เชื่อมต่อที่ 192.168.110.250
LAN2 ใช้ 192.168.111.0/24
- เราเตอร์ 2 (ASUS RT-AC66U) เป็นเซิร์ฟเวอร์ DHCP และอินเทอร์เน็ตเกตเวย์ที่ 192.168.111.254
- สวิตช์และพีซีไคลเอนต์โทรศัพท์ทีวี ฯลฯ
- Thing2 (เซิร์ฟเวอร์ OpenVPN) เชื่อมต่อที่ 192.168.111.250
องค์ประกอบ
เครื่อง OpenVPN แต่ละเครื่อง (Thing1 และ Thing2) มีการติดตั้งและใช้งาน OpenVPN สร้างการเชื่อมต่อสำเร็จแล้ว
ในแต่ละเซิร์ฟเวอร์เราสร้างแท็ปและบริดจ์โดยใช้สคริปต์เริ่มต้นบริดจ์ ฉันตัดมันที่นี่ ...
สะพานเริ่มต้น
echo 1 > /proc/sys/net/ipv4/ip_forward br="br0" tap="tap0" eth="enp2s0" #obtain the Hardware Mac address of the physical ethernet interface eth_hw_mac=`ifconfig $eth | grep 'HWaddr' | cut -d' ' -f9` for t in $tap; do ip tuntap add dev $t mode tap done brctl addbr $br brctl addif $br $eth for t in $tap; do brctl addif $br $t done for t in $tap; do ifconfig $t 0.0.0.0 promisc up done ifconfig $eth 0.0.0.0 promisc up ifconfig $br hw ether $eth_hw_mac dhclient $br # Load ebtables rules to block DHCP traffic across the bridge. ebtables -A INPUT -i tap0 -p ipv4 --ip-proto udp --ip-dport 67:68 -j DROP ebtables -A INPUT -i tap0 -p ipv4 --ip-proto udp --ip-sport 67:68 -j DROP ebtables -A FORWARD -o tap0 -p ipv4 --ip-proto udp --ip-dport 67:68 -j DROP ebtables -A FORWARD -o tap0 -p ipv4 --ip-proto udp --ip-sport 67:68 -j DROP
ข้อแตกต่างเพียงอย่างเดียวคือใน Thing2 ส่วนต่อประสานการแตะมีชื่อว่า tap1 แทนที่จะเป็น tap0
ifconfig ที่เกี่ยวข้องบน Thing1 (192.168.110.250)
br0 Link encap:Ethernet HWaddr b8:ae:ed:fc:4a:4f inet addr:192.168.110.250 Bcast:192.168.110.255 Mask:255.255.255.0 inet6 addr: fe80::baae:edff:fefc:4a4f/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:560719 errors:0 dropped:0 overruns:0 frame:0 TX packets:271873 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:120753983 (120.7 MB) TX bytes:72273308 (72.2 MB) enp2s0 Link encap:Ethernet HWaddr b8:ae:ed:fc:4a:4f inet6 addr: fe80::baae:edff:fefc:4a4f/64 Scope:Link UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1 RX packets:525244 errors:0 dropped:68 overruns:0 frame:0 TX packets:548223 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:142488031 (142.4 MB) TX bytes:129824161 (129.8 MB) tap0 Link encap:Ethernet HWaddr c6:5d:10:17:5c:b9 inet6 addr: fe80::c45d:10ff:fe17:5cb9/64 Scope:Link UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1 RX packets:240521 errors:0 dropped:0 overruns:0 frame:0 TX packets:238686 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:49398722 (49.3 MB) TX bytes:47097224 (47.0 MB)
ifconfig ที่เกี่ยวข้องบน Thing2 (192.168.111.250)
br0 Link encap:Ethernet HWaddr f4:4d:30:08:f1:e5 inet addr:192.168.111.250 Bcast:192.168.111.255 Mask:255.255.255.0 inet6 addr: fe80::f64d:30ff:fe08:f1e5/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1049729 errors:0 dropped:0 overruns:0 frame:0 TX packets:757240 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:5142387727 (5.1 GB) TX bytes:302576425 (302.5 MB) enp2s0 Link encap:Ethernet HWaddr f4:4d:30:08:f1:e5 inet6 addr: fe80::f64d:30ff:fe08:f1e5/64 Scope:Link UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1 RX packets:7254547 errors:0 dropped:389 overruns:0 frame:0 TX packets:3661240 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:6092825279 (6.0 GB) TX bytes:1214754910 (1.2 GB) tap1 Link encap:Ethernet HWaddr 46:6f:ee:61:de:b2 inet addr:192.168.110.1 Bcast:192.168.110.255 Mask:255.255.255.0 inet6 addr: fe80::446f:eeff:fe61:deb2/64 Scope:Link UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1 RX packets:233278 errors:0 dropped:0 overruns:0 frame:0 TX packets:294344 errors:0 dropped:46711 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:46740438 (46.7 MB) TX bytes:129353655 (129.3 MB)
บรรทัดที่เกี่ยวข้องจาก OpenVPN server.conf บน Thing1 (192.168.110.250)
port 1194 proto udp dev tap0 topology subnet ifconfig-pool-persist ipp.txt server-bridge 192.168.110.250 255.255.255.0 192.168.110.1 192.168.110.10 client-to-client keepalive 10 120 persist-key persist-tun
ตารางเส้นทางใน Thing1
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default router.asus.com 0.0.0.0 UG 0 0 0 br0 192.168.110.0 * 255.255.255.0 U 0 0 0 br0 192.168.111.0 192.168.111.250 255.255.255.0 UG 0 0 0 tap0 192.168.111.250 * 255.255.255.255 UH 0 0 0 tap0
ตารางเส้นทางใน Thing2
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default router.asus.com 0.0.0.0 UG 0 0 0 br0 192.168.110.0 192.168.110.250 255.255.255.0 UG 0 0 0 tap1 192.168.110.250 * 255.255.255.255 UH 0 0 0 tap1 192.168.111.0 * 255.255.255.0 U 0 0 0 br0
ปัญหา
ฉันพยายาม ping .111.250 จาก. 110.250 แต่ความละเอียด ARP ไม่เคยเกิดขึ้น ...
ping 192.168.111.250 PING 192.168.111.250 (192.168.111.250) 56(84) bytes of data. From 192.168.110.250 icmp_seq=1 Destination Host Unreachable From 192.168.110.250 icmp_seq=2 Destination Host Unreachable From 192.168.110.250 icmp_seq=3 Destination Host Unreachable
กำลังทำ tcpdump บนการแตะ. 110.250 ในขณะที่ ping กำลังเกิดขึ้น ...
tcpdump -i tap0 -en | grep "ARP" tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on tap0, link-type EN10MB (Ethernet), capture size 262144 bytes 15:43:08.283935 c6:5d:10:17:5c:b9 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 192.168.111.250 tell 192.168.110.250, length 28 15:43:08.300129 46:6f:ee:61:de:b2 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 192.168.110.250 tell 192.168.110.1, length 28 15:43:08.300181 b8:ae:ed:fc:4a:4f > 46:6f:ee:61:de:b2, ethertype ARP (0x0806), length 42: Reply 192.168.110.250 is-at b8:ae:ed:fc:4a:4f, length 28 15:43:09.300441 46:6f:ee:61:de:b2 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 192.168.110.250 tell 192.168.110.1, length 28 15:43:09.300493 b8:ae:ed:fc:4a:4f > 46:6f:ee:61:de:b2, ethertype ARP (0x0806), length 42: Reply 192.168.110.250 is-at b8:ae:ed:fc:4a:4f, length 28 15:43:10.302120 46:6f:ee:61:de:b2 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 192.168.110.250 tell 192.168.110.1, length 28 15:43:10.302170 b8:ae:ed:fc:4a:4f > 46:6f:ee:61:de:b2, ethertype ARP (0x0806), length 42: Reply 192.168.110.250 is-at b8:ae:ed:fc:4a:4f, length 28 15:43:11.300760 46:6f:ee:61:de:b2 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 192.168.110.250 tell 192.168.110.1, length 28 15:43:11.300810 b8:ae:ed:fc:4a:4f > 46:6f:ee:61:de:b2, ethertype ARP (0x0806), length 42: Reply 192.168.110.250 is-at b8:ae:ed:fc:4a:4f, length 28 15:43:12.300762 46:6f:ee:61:de:b2 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 192.168.110.250 tell 192.168.110.1, length 28 15:43:12.300815 b8:ae:ed:fc:4a:4f > 46:6f:ee:61:de:b2, ethertype ARP (0x0806), length 42: Reply 192.168.110.250 is-at b8:ae:ed:fc:4a:4f, length 28
ลำดับนี้ซ้ำสำหรับความพยายามในการ ping แต่ละครั้ง
ในขณะเดียวกันใน tap .111.250 ของ (ซึ่งมี IP 192.168.110.1) ...
tcpdump -i tap1 -en | grep "ARP" tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on tap1, link-type EN10MB (Ethernet), capture size 262144 bytes 15:49:47.315913 c6:5d:10:17:5c:b9 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 192.168.111.250 tell 192.168.110.250, length 28 15:49:47.813360 46:6f:ee:61:de:b2 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 192.168.110.250 tell 192.168.110.1, length 28 15:49:47.830572 b8:ae:ed:fc:4a:4f > 46:6f:ee:61:de:b2, ethertype ARP (0x0806), length 42: Reply 192.168.110.250 is-at b8:ae:ed:fc:4a:4f, length 28 15:49:48.314726 c6:5d:10:17:5c:b9 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 192.168.111.250 tell 192.168.110.250, length 28 15:49:48.812622 46:6f:ee:61:de:b2 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 192.168.110.250 tell 192.168.110.1, length 28 15:49:48.832273 b8:ae:ed:fc:4a:4f > 46:6f:ee:61:de:b2, ethertype ARP (0x0806), length 42: Reply 192.168.110.250 is-at b8:ae:ed:fc:4a:4f, length 28
ถ้าเราดูที่. 111.250 ของ br0 (อันที่จริงมี 192.168.111.250) ...
tcpdump -i br0 -en | grep "ARP" tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on br0, link-type EN10MB (Ethernet), capture size 262144 bytes 15:53:49.969025 c6:5d:10:17:5c:b9 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 192.168.111.250 tell 192.168.110.250, length 28 15:53:50.341753 b8:ae:ed:fc:4a:4f > 46:6f:ee:61:de:b2, ethertype ARP (0x0806), length 42: Reply 192.168.110.250 is-at b8:ae:ed:fc:4a:4f, length 28 15:53:50.968877 c6:5d:10:17:5c:b9 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 192.168.111.250 tell 192.168.110.250, length 28 15:53:51.341336 b8:ae:ed:fc:4a:4f > 46:6f:ee:61:de:b2, ethertype ARP (0x0806), length 42: Reply 192.168.110.250 is-at b8:ae:ed:fc:4a:4f, length 28
แต่ที่อะแดปเตอร์อีเธอร์เน็ตทางกายภาพ ...
tcpdump -i enp2s0 -en | grep "ARP" tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on enp2s0, link-type EN10MB (Ethernet), capture size 262144 bytes 15:56:13.344685 c6:5d:10:17:5c:b9 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 192.168.111.250 tell 192.168.110.250, length 28 15:56:14.344167 c6:5d:10:17:5c:b9 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 192.168.111.250 tell 192.168.110.250, length 28
เท่าที่ฉันเข้าใจแล้วสิ่งที่ bring2 ของ Thing2 ซึ่งมีที่อยู่ 192.168.111.250 ควรส่งคำตอบอย่างเช่น ...
f4:4d:30:08:f1:e5 > c6:5d:10:17:5c:b9, ethertype ARP (0x0806), length 42: Reply 192.168.111.250 is-at f4:4d:30:08:f1:e5, length 28
ฉันไม่รู้ว่านี่จะแก้ไขทุกอย่างที่พังหรือถ้าฉันขาดอะไรที่ชัดเจนมากไป อย่าลังเลที่จะให้คำแนะนำใด ๆ ที่คุณคิดว่าจะย้ายฉันไปในทิศทางที่ถูกต้อง