Linux + OpenVPN บริดจ์อินเตอร์เฟสไม่ตอบสนองต่อ ARP


0

ฉันกำลังพยายามตั้งค่าการเชื่อมต่อ 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

ฉันไม่รู้ว่านี่จะแก้ไขทุกอย่างที่พังหรือถ้าฉันขาดอะไรที่ชัดเจนมากไป อย่าลังเลที่จะให้คำแนะนำใด ๆ ที่คุณคิดว่าจะย้ายฉันไปในทิศทางที่ถูกต้อง

คำตอบ:


1

ปัญหาคือว่าคุณกำลังพยายามเชื่อมโยงเครือข่ายย่อย IP ที่แตกต่างกันสองตัวซึ่งไม่ทำงาน IP ซับเน็ตหนึ่งรายการประกอบด้วยโดเมนการออกอากาศเดียวและตอนนี้คุณกำลังพยายามตั้งค่าเครือข่ายย่อย IP ที่ต่างกันสองรายการในโดเมนการออกอากาศเดียว (เชื่อมต่อผ่าน VPN)

สิ่งที่เกิดขึ้นในช่วงปิงคือการที่คุณ192.168.111.250จะส่งคำขอ ARP เพื่อ192.168.110.250ที่จะไม่ตอบเพราะการร้องขอมาจากที่อยู่ IP 192.168.110.0/24นอกเครือข่ายย่อย

ปัญหาอีกประการหนึ่งในการกำหนดค่าของคุณคือคุณได้กำหนดที่อยู่ IP ทั้งให้กับbr0อุปกรณ์ของคุณซึ่งเป็นอุปกรณ์เชื่อมต่อและtapXอุปกรณ์ซึ่งเป็นส่วนหนึ่งของบริดจ์

คุณควรกำหนดที่อยู่ IP ให้กับอุปกรณ์บริดจ์เท่านั้น

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


ในกรณีนั้นจะตั้งค่า / 16 netmask บนสะพานและก๊อกเพื่อบรรเทาปัญหาหรือไม่
Jonathan Preston

ใช่ว่าจะทำให้มันเป็นโดเมนออกอากาศเดียวครอบคลุมที่อยู่ IP ทั้งหมดจากการ192.168.0.0 192.168.255.255อย่างไรก็ตามหากเครือข่ายจะได้รับอุปกรณ์จำนวนมากในท้ายที่สุดมันจะไม่ทำงานได้อย่างน่าเชื่อถือเนื่องจากปริมาณการออกอากาศที่มากเกินไป คุณอาจต้องการที่จะใช้/23หรือ255.255.254.0netmask ซึ่งครอบคลุมไป192.168.111.0 192.168.112.255
Tero Kilkanen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.