2024年2月

在互联网的时代, DNS解析是非常重要的一环. 没有好的可靠的DNS解析, 你的上网体验会变得非常差劲与糟糕.
问题:虽然公开公用的DNS基本上达到了足够好用,为什么你可能还是需要一个自建的DNS服务?
本质原因在于: 别人的DNS服务可能不可靠,也无法提供个性化的能力
具体拆开来说, 主要是以下几点:
1、DNS劫持:DNS解析被修改, 重定向到其它网站, 甚至是恶意网站的可能.
自建DNS可以选择可信的上游DNS避免被劫持,也可以实现一些自定义劫持的需求。
2、DNS污染:和DNS劫持有点类似, 但劫持的目的是让你访问另一个它希望让你访问的网站, 比如广告. 而DNS污染则是让你访问不了你想访问的网站.只要DNS返回错误的IP, 你就访问不了指定的网站. 因此, DNS污染是一个常见的行为.
3、自定义域名:有些服务需要域名和证书,例如vcenter等。如果没有一个注册好的域名,或者不想在公网DNS中添加域名解析,这时一个自建的DNS能帮你解析一些并不存在的域名。

解决方案:
1、如果精通Windows Server,大可以使用Windows的DNS服务器功能。虽然略显笨重,但是有GUI便于维护。如果有域控的需求,Windows目前仍是不二之选。
2、如果熟悉Linux,并且喜欢通过修改配置文件来实现配置变更的方式,可以选用bind这种最简单的搭建方式。
3、如果熟悉linux又喜欢用GUI,仍有很多选项。比如PowerDNS和ADGuardHome。
PowerDNS的好处很明显,使用mysql存储解析配置,并且可以通过mysql的主从同步实现多点解析同步。
ADGuardHome的名字虽然像是个广告拦截器,实际上他确实也有这个功能,但是作为DNS和DNS中继器也是很好用的。

为了避免在大局域的各个站点要配置不同的DNS地址,各站点的DNS地址是统一的,致敬一下中国互联网创业的前辈,统一配置成3.7.2.1吧。

我的场景中域名是购买的真实域名,假设为abc.com,并且与内网的域控域名保持相同,域名在公网的解析使用cloudflare
内网主站点使用Windows搭建AD作Master,域名为abc.com,各个站点搭建域控的Slave与Master同步;
各分支站点一键部署ADGuardHome用作中继器,*.abc.com解析转发给本地的域控Slave在本地进行解析,其他解析请求转发到当地运营商或当地优选DNS进行解析;
所有abc.com解析到内网地址的在域控Master配置解析,自动同步到各站点Slave;
所有abc.com解析到公网地址的在域控Master配置解析,同时在cloudflare配置解析;

所有用户终端vpn接入配置指定DNS到3.7.2.1实现解析。

努力赚钱是为了赶紧凑够钱赎身从良然后做个好人,不是为了成为头牌。

0x00概述
众所周知,Linux是一个有很多潜在可能性的东西,包括并不仅限于成为一台路由器。
让Linux成为一台路由器并不是一件难事。作为一个通讯硬件厂商出身的攻城狮,自然是习惯于交互式CLI配置的路由器,所以我选择FRRouting。

0x01成为路由器
官网:https://www.frrouting.org
RHEL安装速通:https://rpm.frrouting.org
Debian安装速通:https://deb.frrouting.org
个人倾向于选择frr-8版本,太新的不稳定,太老的有些版本兼容性问题。

0x02其他OS配置
老生常谈,关闭SELinux:vim /etc/sysconfig/selinux打开selinux文件,将文件中“SELINUX=enforcing”修改为“SELINUX=disabled”,修改保存后,重新启动。
配置转发功能并关闭严格过滤:vim /etc/sysctl.conf,添加:
net.ipv4.ip_forward=1
net.ipv6.conf.default.forwarding=1
net.ipv6.conf.all.forwarding=1
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0
保存后sysctl -p即时生效
其他奇葩的路由配置在bgp troubleshooting系列中说明。

0x03启动端口
无论是Zerotier,TailScale,还是Wireguard,现在是时候创建端口了。如果直控虚拟化环境,可以直接加虚拟网卡更简单,不多赘述。

0x04启动协议
FRRouting默认不启动路由协议,请按需启动。vim /etc/frr/daemon ,文件中有一些熟悉的字眼:
bgpd=no
ospfd=no
ospf6d=no
ripd=no
ripngd=no
isisd=no
pimd=no
ldpd=no
nhrpd=no
eigrpd=no
babeld=no
sharpd=no
pbrd=no
bfdd=no
fabricd=no
vrrpd=no
pathd=no
需要那些就改成yes,保存。执行systemctl restart frr重启frr,再执行systemctl enable frr开机自启动。
这已经是一台成熟的路由器了。

0x05开始搞机
在root权限下输入vtysh进入命令行,是一个比较标准的Cisco逻辑的CLI控制台。
默认是只读视图,查看命令用show。
敲configure terminal进入系统视图,提示符变成(config)#就可以开始搞事情了。
配置BGP,先进router bgp[ASN],里面配邻居和宣告就轻车熟路了。
OSPF同理,router ospf进去配。
配置完了记得先退回到只读模式执行保存 write memory保存后再exit退出。

0x06高级一点
如果不希望私网路由窜进公网,或者想搞一网多用,此处可以使用VRF特性,与企业级网络设备的VRF比较类似。
VRF特性需要iproute支持,先yum install iproute
创建一个VRF:sudo ip link add vrf1 type vrf table 101
绑定端口到VRF:sudo ip link set dev eth0 master vrf1
把VRF开起来:sudo ip link set dev vrf1 up
查看VRF:ip link show
用这种方式隔离不同业务属性的的路由表,通过不同VRF之间的路由可以实现overlay跑在underlay上。

先说结论,FTTR 这个解决方案不是给高端玩家和追求性能的玩家做的,是给只需要普通上网的用户适配一些升级体验的需求使用的。高端玩家、极限测速玩家、技术型玩家不要犹豫,该搞软路由 AC+AP 全光纤以太组网的还是要搞的。

PON 的特性大家都清楚,时分复用。所谓光 AP (就是子光猫)之间的通信要经过主光猫(就是那个光猫和小 OLT 的结合体)的,但是这个流量的流向是不符合“普通上网用户”的流量路径的,毕竟绝大多数“普通上网用户”的路径是终端-接入-路由-ISP 。

多加子光猫要多收费的问题,我猜运营商为的是一个物料成本、资源公平和风险预判。目前 FTTR 设备的“官方”发放渠道都是运营商,用户家里用的设备越多,出故障的概率也就越高,需要上门的服务成本也就越高。而且这个设备属于运营商的资产,所以这个多出来的钱应该也有租金的成分。现在有些区域的运营商为了避免用户自己去咸鱼上买光猫,要求设备厂商做了渠道管控技术。。。固件里有定制标识,外区域的子光猫定制标识不符或者没有定制标识的是会被强制踢下线的。

主光猫的二层性能,从产品参数来看确实是不如交换机的。

厂家卖不出去千兆 OLT 这个说法,我觉得不是很靠谱。毕竟这个方案是始作俑者似乎是 HW ,这家之前的光猫和 OLT 都用自研芯片的,芯片受限之后九州代工,这个阶段做大量的硬件方案盈利应该并不大。而且 HW 这套硬件方案是个全新的组合,所以感觉清库存这个说法不是特别靠谱。

FTTR-B 的方案(所谓-B 就是商业用户场景)也有小型的吸顶 AP ,应该是 B671 ,用的光电复合缆。说白了就是在光纤旁边加了两根铜线,设计了个专门的端子来连接。

第一代子光猫 K662 系列最常见的应该是 K662d ,圆筒子那个,没有光线复合,导致很多用户家里子光猫周围一堆线。当时面板式的 k662p 是针对前装市场的,跟装修公司合作推行,没给运营商投放很多。但是毕竟运营商在这种场景下有利益诉求(比如前面那个加 AP 要收费的问题)针对前装市场搞这个方案是有利益冲突的,所以后来也没有强调这个市场细分了,但是依然比较少见一点。

关于杂物间房一个 NAS 那个问题,我印象中现在市场上的子光猫的有线接口还没有 2.5G 的吧?那么最大就是 1G 。如果从另一个房间的从光猫上取 NAS 里的文件,应该是从光猫 A 上行 1G 到主光猫,主光猫到从光猫 B 下行 2.5G (实际上只有 A 上行的 1G ),和传统的千兆组网没啥区别。

这个方案和以太组网相比,好处是有的,但是对于高端用户来说意义不大。
1 、现在房地产市场不太高涨,存量住宅用户很多墙里的线缆还是五类或者超五类,而且还是开发商偷工减料的不满足国标的那种;还有些墙里线缆断了,8 个芯拆成 2 套拿来跑百兆的,这部分用户测速测不满就投诉,运营商说是他墙里线缆的问题,有的时候也解决不了问题。1000M 宽带的普及,这些用户测速不达标的概率越来越大了。
2 、以前有很多光猫上带 wifi ,老猫上带个 wifi5 一般就是拿来诊断一下用的,有些用户一看这猫自带 wifi 了就不买路由器了,然后天天投诉网速慢。以深圳电信为例,上门装宽带猫就用最简单的不带无线的路由猫,下单的时候就收 200 块钱的路由器钱,装维上门安装的时候带一个烽火的路由器给你。这个路由器除了测速能测满、信号很强之外没有任何优点。办宽带的时候你不要路由器,不好意思,200 块钱要先收了,上门安装的时候跟装维说不要再退给你。运营商用这种方式强行划清责任边界,用户的感受好么?我个人是很反感的。

FTTR 就解决了上面这两个问题。第一,用户家里的布线问题某种意义上把责任划归到运营商这边了,所以线缆的标准是有保证的。事实上光纤传输的原理也决定了在一个家庭范围内,光纤的质量再差也不至于影响速度。第二,设备的规格大致统一了。解决这两个问题成本呢,当然还是用户出了。

从设备厂商的角度来讲,还有一层小心思。之前运营商是敢在 GPON 线路上开千兆的,毕竟光猫下行和 wifi 都是瓶颈,测速不满也怪不到他们。现在通过这套方案下游的瓶颈都打开了,然后在主光猫的上行光锁死 XGPON 或者 10GEPON 模式,某种意义上也在倒逼运营商的 OLT 存量演进。

我现在自己家用的还是防火墙+交换机+AC+AP 的方案,但是父母家装了套 FTTR 。1000M 的套餐测速能测到 1300M 左右,内置的 NCE 插件卸掉了基本也不担心被监控,特殊流量旁观了个防火墙,主光猫上做惊静态路由引出去走单臂路由就好了。

如果说我对 FTTR-B 方案有什么期望的话,如果主光猫能集成一个完整的企业防火墙或企业路由器就更好了。

2004年第一次听说BGP是镇江的某些机房宣称自己的线路是BGP线路,对南方电信和北方网通支持的都很好。在那个电信和网通在南北方分别割据的年代,BGP线路是极好的。

2016年开始研究网络架构和路由协议,在市域内的两处住宅试着打通网络,虽然BGP是常用于广域网的,但是家用宽带+动态IP想打通路由,用L2TP打个隧道,实际操作起来形成了一种类似于P2P的网络结构,再加上穷的连一对品牌相同的路由器都凑不出来,用OSPF就多多少少有点难搞了。这时候发现BGP这种通过TCP交换路由信息的协议对网络广播和组播环境根本就不敏感,干脆就上BGP了。

2017年离家外出工作,把数据的根据地留在了TNA,每到一个地方就需要搭建基地站点和局域接入,这时候整个网络架构似乎有点广域网的意思了。毕竟已经有3个节点,其中一个有800公里远了。

2017年下半年到了SZX,建设了第一个SubDC,不仅是一台路由器和AP,下面也有服务器和存储设备了。虽然两端都有动态公网IP,但是通过DDNS解析服务端ip地址再接入,这种方案的稳定性非常差。此时预算具备,在TNA站点接入了一条静态IP地址线路,在华为防火墙上做了DSVPN,在Cisco叫DMVPN,实际上是nhrp+mpGRE组成的一种方案。其实DSVPN本身是具备一定的路由管理能力的,但是经过过去的种种折腾,此时BGP似乎显得更加合适了。

承认不承认的,好吧,我可能就是偏爱BGP。
截止目前,这个广域网络已经具备6个站点,均具备动态公网地址,均分配了一个AS号。当然,这个AS好是我按照自己的标准编制的。

TNA站点的运营商进行了IPv6改造,给了一段动态的/60掩码的ipv6地址。经过一番折腾,我成功的把这些ipv6地址分配给了6个站点。毕竟是动态的ipv6前缀,那么问题出现了:

能不能搞个静态的ipv6前缀?
答案有2个:1、找运营商租一个。2、自己买一个。

此时BGP+IPv6的方案重新出现在了眼前。