[技术交流] 家庭网络大改造,ubnt er-x路由折腾记。9.1bug修改。

Plesunna-avatar

Plesunna

2019-08-26T05:29:25+00:00

前序[url]https://bbs.nga.cn/read.php?tid=18233918[/url]
我家里原来的网络布置
[img]https://img.nga.178.com/attachments/mon_201908/21/c4Q5-6v31K1eT3cSsb-lj.png[/img]

现在因为联通活动多给了一条宽带,准备做双线路
最终选择了买一个ubnt ER-X丢弱电箱

[img]https://img.nga.178.com/attachments/mon_201908/26/c4Q5-1kl8XiZ4zT3cS2c0-340.jpg[/img]
这玩意是真小啊...
现在家里的网络地图如下
[img]https://img.nga.178.com/attachments/mon_201908/26/c4Q5-xzfKsT3cSsl-ii.png[/img]
弱电箱已经变成塞满东西的烤箱
[img]https://img.nga.178.com/attachments/mon_201908/26/c4Q5-ubiXoZ6nT3cS340-2c0.jpg[/img]
这堆东西的发热顺序是 er-x》电信光猫>联通光猫>交换机
谁说er-x不烫的,这玩意铁壳烫的都没法握着,体感温度得50+接近夏天暴晒的路面温度了

等水晶头到了之后重做一批线,并且准备把PC和AP都连到交换机上,再把下载宝塞进来。
计划最终败在了人类的惯性之下

[img]https://img.nga.178.com/attachments/mon_201909/02/c4Q5-gitdXkZ5nT3cS340-2c0.jpg[/img]
重新整理之后,略微清爽了一点,因为懒~~ 线就不截断重接了,这样已经满足了。
没盖盖子散热还不错, 盖子改天表面全部钻孔再装回来好了

折腾完了发现, 原来我家的弱电箱...似乎...还是挺大的...
完全可以再塞点东西进去嘛......

现在er-x作为主路由,负责拨号、策略路由、负载均衡
AC-68U作为AP、下载服务、SMB文件服务
迅雷下载宝单独作为http代理,进行酸酸乳
说实话路由器的CPU再好也只是低频的RISC CPU,绝对算力还是不足,高负载卡顿在所难免。
想一个设备搞定所有,得上桌面平台的软路由才行。所以还是拆分设备各司其职。

网络测速
[img]https://img.nga.178.com/attachments/mon_201908/26/c4Q5-7zidZ29T3cS1z4-140.png[/img]
断开联通,单电信100M,D:116mbps U:23mbps
[img]https://img.nga.178.com/attachments/mon_201908/26/c4Q5-k7x2Z1zT3cS1z4-140.png[/img]
断开电信,单联通200M,D:251mbps U:37mbps
[img]https://img.nga.178.com/attachments/mon_201908/26/c4Q5-2b6bZ23T3cS1z4-140.png[/img]
双线负载均衡,D:362mbps U:60mbps
完美叠加。

下面是折腾er-x的过程和思路,以及一些脚本,有需要的自行取用

到手之后先升级固件,我用的是1.10.10是旧核心的最新固件,几乎没有bug。2.x换了新核心,论坛反应bug不少,转发性能还小有倒退。升级固件gui下就可以完成。

然后开始正式折腾,这里遇到了第一个坑。网上教程很多是早起基于1.6、1.7系统的,那时候向导模式bug多,所以很多人推荐全部cli命令提示行配置,但是现在已经10.10了,常用配置的向导模式已经很完善了,没必要折腾自己用cli。 当然有些命令cli用起来比较方便,而在gui下的config tree要找半天,所以下面还是以写cli为主,用图形界面的自行对照层级去找就可以。

首先是双线路配置,直接用wizards中的load-balance设置,分别选择两条线路的物理接口,选择pppoe拨号,填入用户名和密码,然后在用户设置中修改默认的用户名密码,打开默认防火墙,提交后重启。这样最基本的双拨就弄好了。并且配置了一系列缺省设置,比如switch,firewall,mtu等等。
理论上重启完之后就可以双线上网了,但是这还是远远不够的。下面开始正式折腾
我这里是联通pppoe1接入eth1,电信pppoe3接入eth3,下面相关接口就不重复说了

SSH进入路由开始设置,先说一些基本的命令
add system boot-image
#如果第一次进cli提示Boot image can be upgraded to version XXX,执行这个命令升级引导区。

设置命令
configure
#进入设置模式
commit
#提交修改
discard
#取消修改
save
#保存
exit
#退出配置模式
拨号命令
disconnect interface pppoe1
#断开pppoe1连接
connect interface pppoe3
#pppoe3拨号
基本流程是 进入设置模式--输入修改的命令行--提交--退出
当时确定设置没问题之后, 进入设置,保存,退出

下面正式开始
set system offload hwnat enable
#打开硬件转发,10.9以后硬件转发可以和防火墙并存,不要被老教程骗了
set system time-zone Asia/Shanghai
set system name-server 119.29.29.29
set system name-server 114.114.114.114
#设置系统时区,默认DNS服务器,双线路一定要手动指定服务器。避免dns解析乱跳。

然后是调整pppoe拨号设置
set interfaces ethernet eth1 pppoe 1 default-route none
set interfaces ethernet eth1 pppoe 1 name-server none
set interfaces ethernet eth3 pppoe 3 default-route none
set interfaces ethernet eth3 pppoe 3 name-server none
将两条线路自动配置的网关和路由关掉,由er-x接管,这里我遇到了一个bug,联通线路拨号后如果不自动获取网关和dns的话,会无法访问网络,显示拨号获取了IP但是无法进行网络连接,这应该是本地联通的问题。电信全关掉就可以正常拨号。

下面测试mtu,具体方法baidu第一个就是,配置需要的mtu,我这里两条都是1452
set interfaces ethernet eth1 pppoe 1 mtu 1480
set interfaces ethernet eth1 pppoe 3 mtu 1480
set firewall options mss-clamp mss 1440

然后是调整DCHP服务器,这里我将我的所有有线设备都添加到了静态DCHP中手动分配IP,所有走wifi的移动设备使用自动分配
set service dhcp-server shared-network-name LAN subnet 192.168.1.0/24 start 192.168.1.101 stop 192.168.1.150
set service dhcp-server shared-network-name LAN subnet 192.168.1.0/24 default-router 192.168.1.1
set service dhcp-server shared-network-name LAN subnet 192.168.1.0/24 dns-server 119.29.29.29
set service dhcp-server shared-network-name LAN subnet 192.168.1.0/24 dns-server 114.114.114.114
set service dhcp-server shared-network-name LAN subnet 192.168.1.0/24 lease 36000
#DCHP分配范围
set service dhcp-server shared-network-name LAN subnet 192.168.1.0/24 static-mapping RT-AC68U
set service dhcp-server shared-network-name LAN subnet 192.168.1.0/24 static-mapping ip-address 192.168.1.254
set service dhcp-server shared-network-name LAN subnet 192.168.1.0/24 static-mapping mac-address ff:ff:ff:ff:ff:ff
#静态DCHP分配

下面开始调整负载均衡的设置,我们的目的是联通线路走联通,电信线路走电信,其他线路负载均衡
首先是基础的带宽比例,我电信是100M 联通200M,比例35:65
set load-balance group G interface pppoe1
set load-balance group G interface pppoe1 weight 65
set load-balance group G interface pppoe3
set load-balance group G interface pppoe3 weight 35

之后配置路由表
set protocols static interface-route 0.0.0.0/0 next-hop-interface pppoe1
set protocols static interface-route 0.0.0.0/0 next-hop-interface pppoe3
#默认路由表为双线均衡
set protocols static table 1 interface-route 0.0.0.0/0 next-hop-interface pppoe1
#路由表1为单联通线路
set protocols static table 3 interface-route 0.0.0.0/0 next-hop-interface pppoe3
#路由表3为单电信线路

修改防火墙配置,向导模式中已经建立一系列规则,其中两条规则是针对线路的选择,只是保持固定传入传出连接。
固定了联通电信线路后天然就会有这些功能,所以针对这两条规则进行修改,而不增加规则。
set firewall modify balance rule 30 description "telenet"
set firewall modify balance rule 30 destination group network-group CHINANET
set firewall modify balance rule 30 action modify
set firewall modify balance rule 30 modify table 3
#电信IP走电信线路
set firewall modify balance rule 50 description "unicom"
set firewall modify balance rule 50 destination group network-group UNICOM
set firewall modify balance rule 50 action modify
set firewall modify balance rule 50 modify table 1
#联通IP走联通线路

下面导入联通和电信的IP列表,列表来自APNIC的统计,网上都可以查到然后将这些IP添加到网络组中
set firewall group network-group CHINANET network 1.0.1.0/24
set firewall group network-group UNICOM network 1.24.0.0/13
下面附件提供了联通和电信的写入脚本,
[attach]./mon_201908/26/c4Q5-dqm0K9.rar?filename=ubnt%2erar[/attach]
脚本使用方法:将脚本传到er-x,进入cli命令提示行
chmod +x setunicom
#赋予权限
configure
#进入配置模式
./setunicom
#执行脚本
commit
save
exit
#提交保存退出
注意的是因为列表数目很多,脚本执行和commit都会比较慢,写入电信脚本大概要花10分钟,提交也要花5分钟,要耐心等待。

然后就是我遇到的本次折腾最大的一个坑,因为要加载巨量的地址列表,所以写入地址后er-x的重启速度会变得极慢。
极慢的意思是输入重启命令后到重新可以连入要花费超过20分钟的时间,期间路由器没有任何反应。如果这时候你等不及断电,结果就是路由器挂掉,需要reset按钮恢复出厂设置重来。

到此双线路负载均衡的部分就做好了,很多文章说要将80 443这些端口数据绑定到一条线路上避免乱飘,倒是https或者网银出问题。其实无所谓,在固定dns下,联通电信分流,已经天然归类好IP了,端口部分就不用再折腾了。 境外网站虽然是负载均衡访问,但是也没人使用境外网银把。

下面是酸酸乳部分,之前我的网络是AC-68U拨号+QOS,下载宝padavan固件 用来下载+SMB。
现在下载宝负载酸酸乳,padavan自带,直接打开服务,再开一个HTTP代理监听局域网内请求。记得要允许wan连入。
这里选择这么做的原因是将下载宝变成http代理服务器后,路由不需要做任何配置,只需要将指定流量导向下载宝即可
之前已经指定下载宝分配静态DCHP 192.168.1.250

然后是想办法将指定流量指向代理,这里我没有实用gxwlist或者大陆IP列功能,原因是列表过大,影响性能
并且实际上路由自动化的功能主要是服务电视平板设备,PC手机直接可以使用本地客户端进行连接。
而电视平板使用的网站是及有限的,所以不需要大而全的规则。
错误的方法 ...

那么直接用dsnmasq的定向解析就好了,将特定地址的访问直接导向特定地址
set service dns forwarding options address=/t66y.com/192.168.1.250
将常用的几个网站添加上就完事了,理论如此,但是实际上这么做有点问题,有一部分网站没法工作。
推测是dns污染问题。虽然现在简单的dns污染虽然是很久以前的技术了,但是现在还在用,那么下面的方法作为补充。


设定一个新的路由表
set protocols static table 2 route 0.0.0.0/0 next-hop 192.168.1.250
添加防火墙规则
set firewall modify balance rule 20 description "fuXk GxW"
set firewall modify balance rule 20 destination group address-group GxW
set firewall modify balance rule 20 action modify
set firewall modify balance rule 20 modify table 2
向地址组中添加需要的IP
set firewall group address-group FxW network 8.8.8.8
这是手动添加IP的方法,还有两种自动化方式
第一种是在可靠DNS查询到IP后自动添加到地址列表中
set service dns forwarding options server=/t66y.com.com/8.8.8.8.
set service dns forwarding options ipset=/t66y.com.com/GxW
这种方法需要一个可靠的服务器,会将解析到的地址自动添加到地址池汇中,对有多个IP的网站适用。
当然前提是要回避DNS污染的问题。可以自建DNS用某些软件缓存数据,不过我没啥需求,之后有功夫了在下载宝上挂个DNS服务器好了

另一种方法是,使用一些工具,查询到网站的左右IP,然后用脚本一次性写入地址列表中。
这样虽然看上去一劳永逸,但是会严重拖累性能,还技能联通电信地址表导入以后重启时间就变成20+分钟了么?
出差回来发现了一些问题,上面的这些配置其实是有一些问题的。
主要是学艺不精,啃文档的时候简单看一下就开始配置了,并没有动脑子研究原理。
导致指向下载宝上酸酸乳有问题。下面是新的实现方法
思路是将下载宝设为下一级的网关,下载宝本身也使用路由模式做网关转发酸酸乳流量

首先是新添加一个网关界面,指向下载宝
set protocols static route 0.0.0.0/0 next-hop-interface 192.168.1.250
设定新的路由表,指向上面的网关
set protocols static table 2 route 0.0.0.0/0 next-hop 192.168.1.250
添加防火墙规则
set firewall modify balance rule 20 description "fuXk GxW"
set firewall modify balance rule 20 destination group address-group GxW
set firewall modify balance rule 20 action modify
set firewall modify balance rule 20 modify table 2
设定对应的地址组
set firewall group address-group FxW
打开dnsmasq服务
set service dhcp-server use-dnsmasq enable
设定dnsmasq默认查询地址,重要,开启dnsmasq后,会在本地解析dns,
所以默认查询地址一定要选择可靠的来源,速度不一定是最快的,反正有缓存,一回慢,二回就快了
set service dns forwarding name-server 119.29.29.29
设置缓存,默认150,参考了一些人,大家普遍认为400一下不足以喂饱,1000或者1500以上提升太小
加上个人访问习惯问题,常用网站并不是很多,所以我这里比较保守的设置了500,
set service dns forwarding cache-size 500
然后将系统dns和dchp分配的dns都改由dnsmasq服务接管
delete system name-server 119.29.29.29
delete service dhcp-server shared-network-name LAN subnet 192.168.1.0/24 dns-server 114.114.114.114
set system name-server 192.168.1.1
set service dhcp-server shared-network-name LAN subnet 192.168.1.0/24 dns-server 192.168.1.1
然后剩下需要做的就是将需要访问的网站或者IP加入列表了
set service dns forwarding options ipset=/t66y.com.com/GxW
set firewall group address-group FxW network 8.8.8.8
当然我个人认为119.29.29.29的dns还是比较有节操的,并且现在DNS污染也确实用的少了。所以我还是偏性能向的选择了DNS
当你觉得DNS有可能出错的时候,使用下面命令更改特定网站的查询设置
set service dns forwarding options server=/t66y.com.com/8.8.4.4
现在终于折腾好了,一切使用正常,电信老用户活动,顺手给电信线升级成了200M,现在负载分配变成了50-50
[img]https://img.nga.178.com/attachments/mon_201909/01/c4Q5-9xubK22T3cS1x3-b1.png[/img]
[img]https://img.nga.178.com/attachments/mon_201909/03/c4Q5-8m2vZ16T3cSv9-1vo.png[/img]
[img]https://img.nga.178.com/attachments/mon_201909/03/c4Q5-6y1kKhT1kS9q-5k.png[/img]
负载均衡,路线选择,酸酸乳搞定

下一步准备在下载宝上折腾一个pi hole 全面接管dns请求。 去广告,和更方便的制定特定网站的联通电信线路。

以上。

谢谢各位看官,,