我有一个 3 节点网络,每个节点上都运行 OSPF Quagga。
各节点通过p2p、OpenVPN连接: http://vetal.ca/Download/img/Network_loop.png
(当声誉 > 10 时将在此处嵌入图片)
pfSense 有两个 OpenVPN 客户端,ip 为 10.0.1.2 和 10.0.2.2,分别连接到服务器 1 和 2。
现在,连接 C (10.0.2.1 - 10.0.2.2) 中断。发生的情况是,网络已适应,并且 pfSence 收到 OSPF 更新,该更新表明 (10.0.2.1 - 10.0.2.2) 可通过 [B->A] 路由访问,而不仅仅是 [C] pfSense 拥有有关 10.0.2.1 - 10.0.2.2 链接的信息,并且知道它存在于 2 跳之外。
结果是,当 OpenVPN 时,C-tunnel 客户端尝试重新启动,但无法重新启动。因为它无法分配路由表中的 IP 地址:
引用
/sbin/ifconfig ovpnc1 10.0.2.1 - 10.0.2.2 mtu 1500 netmask 255.255.255.255 up
FreeBSD ifconfig failed: external program exited with error status: 1
手动呼叫告诉
ifconfig: ioctl (SIOCAIFADDR): Address already in use
有什么方法可以防止这种情况发生?我能以某种方式探测死链接吗?因此,如果隧道 C 死掉,服务器 2 会将其删除,并且不会进行通告
我已经尝试过链接检测,它显示服务器 2(OpenVPN 监听端)上的链接已启动:
interface tun1
description VPS link C
link-detect
ipv6 nd suppress-ra
!
是否应使用区域进行分隔,例如 A - 主干网?或者是否有插入 tcp-probe 到 quagga 来判断链接是否可 ping?
如果有调查的话,这将有助于处理另一个案件:
在上图中,如果 A 段出现故障。流量将通过 pfSense 重新路由(B->C 而不是 A)并卡在那里。因为 pfSense 禁止流量在隧道之间通过(有意)。
我是动态路由的新手,相信有一种标准的方法来处理这个循环
答案1
我在 pfSense 论坛上找到了一个可行的解决方案:
https://forum.pfsense.org/index.php?topic=91361.msg506747#msg506747
因此,对于客户端来说,这是经验法则。
对于每个 VPN-ospf 端点,禁用对“my(endpoint) IP/32”的接受。因此,它不会来自另一端。
例如,在图表中,它在 zebra.conf 中看起来像这样:
password <my-password>
log syslog
ip prefix-list ACCEPTFILTER deny 10.0.1.2/32
ip prefix-list ACCEPTFILTER deny 10.0.2.2/32
ip prefix-list ACCEPTFILTER permit any
route-map ACCEPTFILTER permit 10
match ip address prefix-list ACCEPTFILTER
ip protocol ospf route-map ACCEPTFILTER