การกำหนดค่าที่เหมาะสมสำหรับ Quagga OSPF บนเครือข่าย OpenVPN


1

อันดับแรกทอพอโลยีเครือข่ายแบบง่ายของฉัน

                      [ hub ]
                         |
                      OpenVPN
                         |
10.77.1.0/24--[ base ]---|---[ mr0  ]--10.77.2.0/24
10.77.3.0/24--[ mr1  ]---|---[ mr2  ]--10.77.5.0/24
10.77.5.0/24--[ mr3  ]---| ...

hubเป็น Ubuntu VPS ที่ใช้เซิร์ฟเวอร์ OpenVPN ที่มี IP สาธารณะคงที่ baseเป็นไฟร์วอลล์ pfSense ที่บ้านของฉันซึ่งมีตำแหน่งคงที่ แต่เปลี่ยน IP แต่ละmr#โหนดเป็นเราเตอร์มือถือที่ไม่มีที่อยู่ IP หรือที่ตั้งที่สอดคล้องกันและอาจอยู่เบื้องหลังไฟร์วอลล์ NAT เพิ่มเติมหรือไม่ก็ได้ เครือข่าย CIDR ที่ระบุไว้เป็นซูเปอร์มาร์เก็ตเชื่อมต่อโดยตรงกับเราเตอร์

สำหรับจุดประสงค์ในการอ่านบันทึกนี่คือ IP ของฉันรหัสเราเตอร์และระบบปฏิบัติการ:

host  ip           ospf id        os
hub   10.77.0.254  10.77.255.254  ubuntu
base  10.77.0.253  10.77.255.253  pfsense
mr0   10.77.0.252  10.77.255.252  lede
mr1   10.77.0.251  10.77.255.251  pfsense
mr2   10.77.0.250  10.77.255.250  centos
mr3   10.77.0.249  10.77.255.249  vyos

บนเซิร์ฟเวอร์ฮับฉันเปิดใช้งานไคลเอนต์กับไคลเอนต์และจำนวนมากroutesและiroutesผลักดันไปยังไคลเอนต์ต่าง ๆ ด้วยการตั้งค่านี้ฉันสามารถเชื่อมต่อจากโหนดใด ๆ ไปยังโหนดใด ๆ (ภายในกฎไฟร์วอลล์) แต่การตั้งค่านี้ไม่สามารถปรับขนาดได้และฉันต้องรีสตาร์ทไคลเอนต์และเซิร์ฟเวอร์ทุกครั้งที่มีการเปลี่ยนเส้นทางดังนั้นฉันจึงกำลังทำการเปลี่ยนการตั้งค่าแบบคงที่นี้ด้วย Quagga OSPF

ปัญหาของฉันปรากฏขึ้นคล้ายกับhttps://serverfault.com/questions/189739/tough-routing-problem-with-linux-quagga-and-openvpnอย่างไรก็ตามโซลูชันที่ได้รับการยอมรับของพวกเขาคือการทำให้ทุกอย่างคงที่ ฉันพยายามหลีกเลี่ยง

จนถึงตอนนี้ฉันมีการกำหนดเส้นทางแบบไดนามิกที่ทำงานระหว่างเราเตอร์ Linux ( mr2) ของฉันhubและเดสก์ทอป Linux แบบสุ่มที่ฉันเพิ่มใน VPN เพื่อทดสอบเราเตอร์ 3 OSPF เราเตอร์ VyOS และ LEDEของฉันมีปัญหาด้วยเหตุผลที่ไม่เกี่ยวข้องกับคำถามนี้ (แก้ไข: VyOS ทำงานทุกคืน)


ตอนนี้สำหรับปริศนา:

ไฟร์วอลล์ pfSense สองอันของฉัน (อันใดอันหนึ่งbaseและอีกอันเป็นmr1) ทั้งข้อความสแปมที่คล้ายกัน:

2017/12/31 13:14:55 OSPF: Packet[DD]: Neighbor 10.77.255.250: Initial DBD from Slave, ignoring.
2017/12/31 13:15:00 OSPF: Packet[DD] [Slave]: Neighbor 10.77.255.254 packet duplicated.
2017/12/31 13:15:00 OSPF: *** sendmsg in ospf_write failed to 10.77.0.254, id 0, off 0, len 72, interface ovpnc1, mtu 1500: Network is unreachable
2017/12/31 13:15:00 OSPF: *** sendmsg in ospf_write failed to 10.77.0.254, id 0, off 0, len 108, interface ovpnc1, mtu 1500: Network is unreachable
2017/12/31 13:15:00 OSPF: Packet[DD]: Neighbor 10.77.255.250: Initial DBD from Slave, ignoring.
2017/12/31 13:15:00 OSPF: *** sendmsg in ospf_write failed to 10.77.0.250, id 0, off 0, len 52, interface ovpnc1, mtu 1500: Network is unreachable
2017/12/31 13:15:05 OSPF: Packet[DD] [Slave]: Neighbor 10.77.255.254 packet duplicated.

เนื่องจากกล่อง pfSense ไม่สามารถส่งการตอบกลับ OSPF ได้จึงทำให้เครือข่ายอยู่ในสถานะนี้:

hub# sh ip os ne

    Neighbor ID Pri State           Dead Time Address         Interface            RXmtL RqstL DBsmL
10.77.255.250     1 Full/Backup       37.090s 10.77.0.250     tun0:10.77.0.254         0     0     0
10.77.255.251     0 ExStart/DROther   31.661s 10.77.0.251     tun0:10.77.0.254         0     0     0
10.77.255.253     0 ExStart/DROther   31.648s 10.77.0.253     tun0:10.77.0.254         0     0     0

เนื่องจากมันไม่สามารถส่งอะไรได้โหนด pfSense จึงติดขัด:

base# sh ip os ne

Neighbor ID     Pri State           Dead Time Address         Interface            RXmtL RqstL DBsmL
10.77.255.250     1 ExStart/Backup    36.505s 10.77.0.250     ovpnc1:10.77.0.253       0     0     0
10.77.255.251     0 2-Way/DROther     37.276s 10.77.0.251     ovpnc1:10.77.0.253       0     0     0
10.77.255.254     1 Exchange/DR       37.763s 10.77.0.254     ovpnc1:10.77.0.253       1     0     0

ฉันไม่แน่ใจว่านี่เป็นปัญหาการกำหนดค่า OpenVPN, ปัญหาการกำหนดค่า Quagga, ปัญหาการกำหนดค่าระบบปฏิบัติการหรือข้อบกพร่องในส่วนประกอบอย่างน้อยหนึ่งรายการ Quagga ดูเหมือนว่าจะทำงานได้อย่างถูกต้องเมื่อฉันเพิ่งใช้ลิงก์อีเธอร์เน็ต (ตามที่มันเกิดขึ้น, baseและmr1, และmr3กำลังแชร์ตำแหน่งทางกายภาพในขณะนี้), ดังนั้นจึงปรากฏว่านี่เป็นการ จำกัด การใช้ OSPF ผ่าน OpenVPN


แก้ไข 2018 ม.ค. 06: ตลอดกระบวนการนี้ฉันสังเกตเห็นว่าตัวส่วนร่วมคือเราเตอร์ที่ทำงานทุกตัวนั้นใช้ Linux การกำจัดสิ่งสกปรกบนของฉันnetstatผลลัพธ์เป็นล้านครั้งฉันค้นพบว่ากล่อง pfSense ของฉันใช้งานอะแด็ปเตอร์ปรับแต่งของ OpenVPN แตกต่างกัน: ใน Linux ที่อยู่ของตัวปรับช่องรับสัญญาณถูกตั้งค่าด้วยซับเน็ตมาสก์ดังนั้นจึงอนุญาตให้โหนดที่ติดอยู่กับ VPN ใน FreeBSD อะแดปเตอร์รับสัญญาณจะแสดงเป็นจุดต่อจุด (ซึ่งเป็นแม้กระทั่งใน Linux) และเส้นทาง IPv4 จะถูกเพิ่มเข้าไปเพื่อจับคู่กับส่วนที่เหลือของเครือข่าย จำไม่ได้ว่าฉันทำสิ่งนี้หรือเกิดขึ้นโดยอัตโนมัติ แต่เป้าหมายที่ฉันคาดเดาคือ: ก) ฉันจะรับ FreeBSD / pfSense เพื่อสร้างอะแดปเตอร์ TUN ที่จะทำงานเหมือน Linux ที่อนุญาตการเชื่อมต่อ "โดยตรง" ได้อย่างไร ฉันจะให้ Quagga อนุญาตให้ส่งแพ็คเก็ตได้อย่างไร

pfSense:

[root@base ~]# ifconfig ovpnc1
ovpnc1: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1500
    options=80000<LINKSTATE>
    inet6 fe80::20c:29ff:feac:faf4%ovpnc1 prefixlen 64 scopeid 0x16
    inet 10.77.0.253 --> 10.77.0.225  netmask 0xffffffe0
    nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
    groups: tun openvpn
    Opened by PID 27659
[root@base ~]# netstat -nr4 | grep -e ovpnc1 -e link#22
10.77.0.224/27     10.77.0.225        UGS      ovpnc1
10.77.0.225        link#22            UH       ovpnc1
10.77.0.253        link#22            UHS         lo0
...
[root@base ~]# ping -r -c 2 10.77.0.254
PING 10.77.0.254 (10.77.0.254): 56 data bytes
ping: sendto: Network is unreachable
ping: sendto: Network is unreachable

--- 10.77.0.254 ping statistics ---
2 packets transmitted, 0 packets received, 100.0% packet loss

ลินุกซ์:

[root@mr2 ~]# ip a sh dev tun0
18: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 100
    link/none
    inet 10.77.0.250/27 brd 10.77.0.255 scope global tun0
       valid_lft forever preferred_lft forever
[root@nl3-mr2 ~]# ip ro | grep tun0
10.77.0.224/27 dev tun0 proto kernel scope link src 10.77.0.250
...
[root@mr2 ~]# ping -r -c 2 10.77.0.254
PING 10.77.0.254 (10.77.0.254) 56(84) bytes of data.
64 bytes from 10.77.0.254: icmp_seq=1 ttl=64 time=51.1 ms
64 bytes from 10.77.0.254: icmp_seq=2 ttl=64 time=51.2 ms

--- 10.77.0.254 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 51.117/51.199/51.281/0.082 ms

OpenVPN server.conf:

port 1194
management localhost 1194
proto udp
dev tun

ca ca.crt
cert server.crt
dh dh2048.pem
tls-auth ta.key 0
key-direction 0

auth SHA256
cipher AES-256-CBC

mode server
tls-server
topology subnet
push "topology subnet"
ifconfig 10.77.0.254 255.255.255.224
push "route-gateway 10.77.0.254"
client-to-client
config ccd/routes.conf
push "route 10.77.4.0 255.255.255.0 10.77.0.254 250"
client-config-dir ccd

user nobody
group nogroup

persist-key
persist-tun

status openvpn-status.log

verb 4

ตัวอย่างไฟล์ ccd (อันนี้ใช้สำหรับbase):

config ccd/routes_push.conf
ifconfig-push 10.77.0.253 255.255.255.224
iroute 10.77.1.0 255.255.255.0

CCD / routes.conf:

route 10.77.1.0 255.255.255.0 10.77.0.253 250
route 10.77.2.0 255.255.255.0 10.77.0.252 250
route 10.77.3.0 255.255.255.0 10.77.0.251 250
route 10.77.5.0 255.255.255.0 10.77.0.250 250
route 10.77.6.0 255.255.255.0 10.77.0.249 250

CCD / routes_push.conf:

push "route 10.77.1.0 255.255.255.0 10.77.0.253 250"
push "route 10.77.2.0 255.255.255.0 10.77.0.252 250"
push "route 10.77.3.0 255.255.255.0 10.77.0.251 250"
push "route 10.77.5.0 255.255.255.0 10.77.0.250 250"
push "route 10.77.6.0 255.255.255.0 10.77.0.249 250"

ตัวย่อกำลังรันอยู่บนhub:

...
!
service advanced-vty
service password-encryption
!
debug ospf event
!
...
!
interface tun0
 description grandcentral-hub
 ip ospf network broadcast
 ipv6 nd suppress-ra
 no link-detect
!
router ospf
 ospf router-id 10.77.255.254
 log-adjacency-changes
 network 10.77.0.224/27 area 0.0.0.0
 network 10.77.4.0/24 area 0.0.0.0
 network 172.17.0.0/16 area 0.0.0.0
 area 0.0.0.0 range 10.77.4.0/24
!
ip forwarding
ipv6 forwarding
!
line vty
!
end

การกำหนดค่าการทำงานอย่างย่อbaseตามที่สร้างโดย pfSense:

...
!
interface ovpnc1
 ip ospf network broadcast
 ip ospf priority 0
!
...
!
router ospf
 ospf router-id 10.77.255.253
 log-adjacency-changes detail
 passive-interface em0.1
 network 10.77.0.224/27 area 0.0.0.0
 network 10.77.1.0/27 area 0.0.0.0
 network 10.77.1.192/26 area 0.0.0.0
 network 192.168.254.0/24 area 0.0.0.0
!
ip forwarding
ipv6 forwarding
!
line vty
!
end

คำตอบ:


0

แก้ไข 20 มกราคม 2018 17:57 CST: ตามที่grawityชี้ให้เห็น (ขอบคุณมาก) เพียงแค่ใช้อุปกรณ์แตะแทน tun แก้ไขทุกอย่าง น่าจะมีความคิดก่อนหน้านี้ว่า

ที่ถูกกล่าวว่าฉันยังคงมองหาวิธีการแก้ปัญหาด้วย Tun เพื่อดูว่าเป็นไปได้ ฉันไม่ทราบว่า ~ 20 ไบต์คี่จากส่วนหัวอีเธอร์เน็ตอาจมีความสำคัญสำหรับลิงค์ DSL และแน่นอนว่าการบันทึกจะทึบมากขึ้นเนื่องจากMULTI: Learn:รายการทั้งหมดตอนนี้เป็นที่อยู่ MAC เสมือนแทนที่จะเป็นที่อยู่ IP


ดูเหมือนว่าสิ่งที่ฉันพยายามจะทำไม่สามารถทำได้โดยใช้ Tun OpenVPN เป็นอินเทอร์เฟซแบบจุดต่อจุดตามธรรมชาติและการใช้งาน OpenVPN / TUN ของ Linux ช่วยให้การสื่อสารแบบไคลเอ็นต์ต่อไคลเอ็นต์ถูกซ่อนอยู่ภายในเครือข่ายสแต็ก

ในทางตรงกันข้าม FreeBSD จะเปิดเผยอินเตอร์เฟสแบบจุดต่อจุดแบบดิบและติดตั้งเส้นทางเพื่อจัดการไคลเอ็นต์กับไคลเอ็นต์ (ทดสอบบน FreeBSD 11.1-RELEASE ที่สะอาด)

นอกจากนี้เมื่อคุณเปลี่ยนที่อยู่ IP ภายในของเซิร์ฟเวอร์ OpenVPN นั้นจะยังคงกำหนดที่อยู่ IP เริ่มต้น (IP ที่มีอยู่ต่ำสุดในช่วง) ให้กับอินเตอร์เฟสแบบจุดต่อจุด

ดังนั้นเพื่อแก้ไขปัญหานี้ฉันจะต้องปรับใช้ทุกอย่างให้เป็นระบบแบบจุดต่อหลายจุด (เรียนรู้สิ่งใหม่) ฉันจะอัปเดตคำตอบนี้เมื่อฉันได้รับมัน


1
บางทีคุณควรใช้โหมดแตะแทน
grawity

แน่นอนฉันควรจะได้คิดว่าก่อนหน้านี้* * * * * * * * facepalm ฉันต้องการใช้ tun และไม่จำเป็นต้องแค็ปซูลส่วนหัวอีเธอร์เน็ตเสริม แต่ตอนนี้ใช้ได้สำหรับตอนนี้
computergeek125

1
คุณอาจต้องกำหนดค่าอินเทอร์เฟซให้เป็นส่วนต่อประสานที่ไม่ออกอากาศ OSPF อุโมงค์จำนวนมากไม่รองรับมัลติคาสต์ซึ่งเป็นสิ่งที่ OSPF จะพยายามใช้กับเครือข่ายออกอากาศ ซึ่งหมายความว่า OSPF จะต้องได้รับการกำหนดค่าด้วยคำสั่ง Neighbor
Ron Maupin

ใช้งานได้ตราบใดที่คุณไม่ได้เปลี่ยนที่อยู่ IP ของเซิร์ฟเวอร์ VPN และคุณไม่จำเป็นต้องทำการผนวกกับเราเตอร์อื่นใดนอกเหนือจากฮับ VPN น่าเสียดายที่มันไม่ใช่ Multicast ที่เสียใน FreeBSD tun (Unicast เป็นตัวประหลาด) คุณยังคงได้รับOSPF: *** sendmsg in ospf_write failed to 10.77.0.254, id 0, off 0, len 72, interface tun0, mtu 1500: Network is unreachable
computergeek125
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.