《宅》话 篇六:旁路由动态网关设置——指南
亲爱的小伙伴们,大家好上一篇文章我提到了解决旁路由痛点到办法—可以设置动态网关,以及可以使用的软件或者硬件,但是没有讲解具体的实施方案。 现在我给大家分享一下具体到实施方案,到底怎么做?
首先确定我们具备以下几个条件:
第一条
肯定你的主路由是可以跑 OSPF 协议的,上一篇文中有小伙伴咨询我爱快,我查了下爱快是支持的,不过可能是要商业版或者爱快的硬件才开放这个功能!
可以支持跑 ospf 协议的路由设备其实是很多的,不过我们最常能接触到的应该就是可以安装OpenWRT的路由器,不管是硬路由还是软路由。 我主要介绍的方案适用于使用 OpenWRT 做主路由的小伙伴,当然我还有台 Mikrotik RoS 也在用这个方案,也会简单介绍下,不过用 Ros 的大佬们估计我只是说一下就明白怎么搞了。使用 OpenWRT 的小伙伴们水平不一,很多人确实不是很了解😉。 华硕之类的路由使用的是 Linux,由于是面向家用我印象中没有这个功能,(很久没用华硕了,太贵了!)不过说到底它也就是个 linux,可以用华硕给的 sdk 编译一个软件也能跑,这里我就不做扩展了。
第二条
当然是您在使用旁路由方案,有一个旁路由设备了。 作为旁路由的设备五花八门,有软路由、电视盒子比如N1、树莓派、甚至 mac mini 等等,不过本质也是Linux(或者unix), 肯定是可以跑的,我手里的旁路由都是使用的 debian 系统,所以我就用这个做演示。
开始正题
安装软件
我上一篇已经介绍了相关软件,我在这里再重复一次。 主路由上我推荐使用 frr 或者 bird, 这里bird 是有两个版本,bird1 和 bird2 ,我在这里只做frr 和 bird2的示例,包括分享配置文件和过程。 另外bird1 是有web gui的,感兴趣的小伙伴可以自己摸索。
旁路由上我推荐使用 bird2 ,我算是稍稍熟悉一些,懒人我建议和我一样,直接抄就完了!
由于我用的是 debian,所以用包管理器安装 bird2 就可以了。
我这里已经安装过了,所以就是这样了!
配置文件
需要注意的是,我推荐旁路由使用tun 方案,这样路由表的相关配置比较简单,如果是 redirect 的方案,就需要旁路由推送比较庞大的路由表,大概几万条,对于新手不太友好。比如我这条宽带采取的方案就是这个几万条路由表的方案,只要机器比较好其实动态刷新也只需要一两秒。
主路由
OpenWRT 主路由 frr 配置文件
# # 后面的是文件说明
root@OpenWrt:~# cat /etc/frr/frr.conf
frr version 8.5.1
frr defaults traditional
hostname OpenWrt
log syslog
!
router ospf # 开启路由
ospf router-id 10.18.0.1 # 设置你的路由id, 建议是主路由的 lan ip地址
network 10.18.0.0/24 area 0.0.0.0 # 这里填写你的局域网子网 以及区域,不懂的直接抄
!
access-list vty seq 5 permit 127.0.0.0/8
access-list vty seq 10 deny any
!
line vty
access-class vty
exit
!
root@OpenWrt:~# cat /etc/frr/daemons
# The staticd,watchfrr and zebra daemons are always started.
#
bgpd=no
ospfd=yes # 只需要改这个,改成yes
.......
启动服务
控制台 service frr enable, service frr start ,或者web界面
OpenWRT 跑 bird2
root@OpenWrt:~# cat /etc/bird.conf
log syslog all;
# debug protocols all;
router id 10.18.0.1; # 改成你的主路由 ip
protocol device {
}
protocol direct {
# interface "br-lan";
ipv4;
ipv6;
}
protocol kernel kernel4 {
ipv4 {
export all;
};
}
protocol kernel kernel6 {
ipv6 {
export all;
};
}
protocol static static4 {
ipv4;
}
protocol static static6 {
ipv6;
}
protocol ospf {
ipv4 {
import all;
# export all;
};
area 0.0.0.0 {
interface "br-lan" { # 这里改成你的局域网网口,我这里是 br-lan
};
};
}
旁路由
注意:我使用的是clash tun模式,fake-ip模式,这样比较便捷!当然用其它方法也可以的,就需要比较庞大的路由表,这里暂时不做扩展。
配置文件 /etc/bird/bird.conf
ob_@bookworm:~$ sudo cat /etc/bird/bird.conf
[sudo] password for ob_:
下面是旁路由的配置文件
log syslog all;
router id 10.18.0.23; # 这里改成你的旁路由 ip
protocol device {}
protocol direct {
disabled;
ipv4;
ipv6;
}
protocol kernel {
ipv4 {
import none;
export all;
};
}
protocol kernel {
ipv6 {
import none;
export all;
};
}
protocol static {
ipv4;
route 198.18.0.0/16 via 198.18.0.1; #198.18.0.1是我的clash tun接口ip,请改成你自己的
}
protocol static {
ipv6;
}
protocol ospf {
ipv4 {
export all;
};
area 0.0.0.0 {
interface "ens*" {
};
};
}
其它要点
我这里主要讲解的是网关的动态切换,但是实际使用中还有一个 dns 分流以及动态切换的问题,因为使用旁路由我们的 dns 服务也是运行在旁路由上的,一旦旁路由故障,dns 没有自动切换,还是会造成网络故障,设备无法上网。
OpenWRT 需要写个脚本才能实现,最近比较懒还没搞,大概思路就是每隔1分钟ping一下旁路由,如果挂掉无响应,就重启主路由上的dns服务并切换dns服务器到主路由,如果正常就保持原样。
今天小试牛刀,分享给大家!
脚本
复制脚本到你的openwrt,加上执行权限,然后在计划任务里面添加 每分钟运行一次,不过我还没有机会实际测试,有错误欢迎大家帮助指正!
这个脚本用来监测旁路由是否正常
#!/bin/sh
ping -c 3 10.18.0.23 # 这里改成你的旁路由 ip
if [ "$?" = 0 ];then
echo '旁路由正常'
else
echo '旁路由挂了'
uci set dhcp.lan.dhcp_option='6,10.18.0.1'; uci set dhcp.@dnsmasq[0].server='10.18.0.1'; uci commit dhcp
fi
这个脚本用来在旁路由恢复正常以后,把dns也恢复过来
#!/bin/sh
DNSIP='10.18.0.23'
DNSip=`uci get dhcp.@dnsmasq[0].server`
ping -c 3 10.18.0.23 # 这里改成你的旁路由 ip
if [ "$DNSIP" = "$DNSip" ] && [ "$?" = 0 ];then
echo '旁路由正常'
else
echo '旁路由挂了'
uci set dhcp.lan.dhcp_option='6,10.18.0.23'; uci set dhcp.@dnsmasq[0].server='10.18.0.23'; uci commit dhcp
fi
总结
今天分享的东西有点杂,张大妈贴代码也不太方便,欢迎大佬点评!
感谢阅读
欢迎点赞评论关注!欢迎加入圈子!
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
技术宅是我梦想
校验提示文案
技术宅是我梦想
校验提示文案
洋气de小龙哥
校验提示文案
丶悠
校验提示文案
北城小陌
校验提示文案
冰封结
校验提示文案
宋世江山
校验提示文案
飘摇的风雨
校验提示文案
jiaoting
校验提示文案
落雪有声86
校验提示文案
小潭总
校验提示文案
隔壁的七大叔
校验提示文案
南瓜花花_
校验提示文案
五十包郵解君愁
校验提示文案
清风静入夜
校验提示文案
啥都没有
校验提示文案
Samn
校验提示文案
飘摇的风雨
校验提示文案
Samn
校验提示文案
啥都没有
校验提示文案
清风静入夜
校验提示文案
五十包郵解君愁
校验提示文案
jiaoting
校验提示文案
技术宅是我梦想
校验提示文案
冰封结
校验提示文案
南瓜花花_
校验提示文案
洋气de小龙哥
校验提示文案
隔壁的七大叔
校验提示文案
北城小陌
校验提示文案
宋世江山
校验提示文案
小潭总
校验提示文案
技术宅是我梦想
校验提示文案
丶悠
校验提示文案
落雪有声86
校验提示文案