之前写过一个版本,基于380.x的,一开始好用,最近过来发现不好使了。索性把家里路由升级到384.9,重新配置。
拓扑结构基本不变,增加了需求让两边家里能互通,所以把NAT关了。
这回直接简化,搞了个github的repo,https://github.com/sskaje/merlin-pbr,把jffs的配置脚本放进去了,依旧是 dnsmasq + ipset,但是openvpn-event脚本 也可以手工维护路由列表,自动走openvpn的网卡。
sskaje's blog, study & research on technology
之前写过一个版本,基于380.x的,一开始好用,最近过来发现不好使了。索性把家里路由升级到384.9,重新配置。
拓扑结构基本不变,增加了需求让两边家里能互通,所以把NAT关了。
这回直接简化,搞了个github的repo,https://github.com/sskaje/merlin-pbr,把jffs的配置脚本放进去了,依旧是 dnsmasq + ipset,但是openvpn-event脚本 也可以手工维护路由列表,自动走openvpn的网卡。
看到说北京联通的pppoe也开始启用ipv6了,在EdgeRouter Lite上开了一下设置。
联通给了个 /56 的prefix。
我的eth1接了上行,pppoe拨号,eth0是lan。
1 2 3 4 5 6 |
set interfaces ethernet eth1 pppoe 0 ipv6 address autoconf set interfaces ethernet eth1 pppoe 0 ipv6 enable set interfaces ethernet eth1 pppoe 0 ipv6 dup-addr-detect-transmits 1 set interfaces ethernet eth1 pppoe 0 dhcpv6-pd pd 0 interface eth0 service slaac set interfaces ethernet eth1 pppoe 0 dhcpv6-pd pd 0 prefix-length /56 |
lan
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
interface { ethernet eth0 { ipv6 { router-advert { cur-hop-limit 64 link-mtu 0 managed-flag false max-interval 600 other-config-flag false prefix ::/64 { autonomous-flag true on-link-flag true valid-lifetime 2592000 } reachable-time 0 retrans-timer 0 send-advert false } } } } |
记住配置防火墙
这是一个5年前留下的坑,12年买的EA6500v1,港版,5G频段只能看到 36,40,44,48,中国能用的不给用。
最近几年一直在用华硕系,两个ac68u两个ac88u,EA6500v1一直在吃灰,原配的电源适配器(12v2A)也被我挪走他用了。
想把EA6500送人吧,但是又觉得如果5G频段没解锁,别人用起来也尴尬。想当年,因为802.11d的原因,macbook经常找不到5G的SSID,我只能强制连一个Country Code是US的别人家的WiFi,才能看到_5GHz的。
后来试过DD-WRT解锁,因为不稳定,所以想解锁了再切回来,但是没用。
中间看到过 https://securityevaluators.com/knowledge/case_studies/routers/linksys_ea6500.php 这个安全报告,也试着写了个脚本去构造备份文件上传,试图直接启用频道,未果。
后来看到DD-WRT的Wiki上有张图,标识了主板上的几个点,可以用console直接来改设备,于是买了ttl卡,直接开搞。
图在这里:
EA6500v1 固件 1.1.29.162351 在这里 https://dl.sskaje.me/EA6500/
USB-TTL、杜邦线、排针(5pin)
CoolTerm (Windows下可以用PuTTY)
固件可以用 binwalk 直接解包,mac下squashfs没法搞,所以我直接去linux下操作的。期间还会需要 sasquatch,从https://github.com/devttys0/sasquatch 下载,然后build即可。
我把解包好的目录打了个包,可以从这里下载。
TTL板我从淘宝上买了个,链接是 https://detail.tmall.com/item.htm?id=16809187607 ,选了个偏贵的。
里边送了杜邦线和排针,杜邦线一头6个针脚一体的,直接插上。
参考前边的EA6500主板图,Vcc/TxD/RxD/n.c./GND,其中GND的地线没有用焊锡填充,所以从TTL线送的排针里拿出一个,把最边上的针脚的高度调一下,使得排针不用刻意固定就能与主板上的焊点接触上。
TTL板的针脚有6个,VCCIO/GND/TXD/RXD/RTS/CTS。杜邦线对应的 Vcc 连 VCC,GND连GND,TxD连RXD,RxD连TXD,其他不接,按这个对应关系接好排针。
我的macOS High Sierra没有额外装驱动就识别到了串口设备。
CoolTerm 配置波特率 115200,其他默认。在CoolTerm主界面点Connect,确认排针已经稳定接触好焊点之后,给EA6500上电,就能看到CoolTerm里有输出了。
在启动的时候,按 ctrl + c,多按几次就能看到 CFE> 的提示符了。
之前在研究构造备份文件的方案时,看到syscfg里有好多code,例如 wl0_country_code, wl1_country_code, ccode, wl_country。
这回全改成US,启动之后就 wl: Bad Channel 了。
/etc/regccode 这个文件内容如下
1 2 3 4 5 |
APAC "EU" US "Q2/13" EMEA "EU" ETSI "EU" EU "EU" |
而,在CFE里,使用 devinfo show 看到的
1 2 3 4 |
wl0_country_code=EU wl1_country_code=EU ccode=EU wl_country=AP |
乱试几种组合都无效后,恢复了配置,然后从固件的启动脚本里找了找
1 2 3 4 5 6 7 |
$ grep -r country etc/init.d/service_wifi/ etc/init.d/service_wifi//wifi_platform_specific_setting.sh:set_driver_country_code() etc/init.d/service_wifi//wifi_platform_specific_setting.sh: wl -i $PHY_IF country $regioncode etc/init.d/service_wifi//wifi_platform_specific_setting.sh: echo "wifi, carrera $PHY_IF country code set $regioncode" #for debugging etc/init.d/service_wifi//wifi_platform_specific_setting.sh: set_driver_country_code etc/init.d/service_wifi//wifi_debug_suppliment.sh: echo "Country : `wl -i ${PHY_IF} country`" etc/init.d/service_wifi//wifi_debug_show_info.sh: echo "Country Regulation: `wl -i $INTF country`" |
于是看到了这个函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
set_driver_country_code() { if [ "`syscfg get device::modelNumber`" = "EA6500" ] && [ "`syscfg get device::hw_revision`" = "1" ] ; then ccode=`syscfg get device::ccode` regrev=`syscfg get device::regrev` if [ -z "$ccode" ] || [ -z "$regrev" ] ; then regioncode="Q2/13" #default to US else regioncode="$ccode/$regrev" fi for PHY_IF in $PHYSICAL_IF_LIST; do wl -i $PHY_IF country $regioncode echo "wifi, carrera $PHY_IF country code set $regioncode" #for debugging done fi } |
只要 ccode 和 regrev任意一个字段都是空的,系统就会默认到 Q2/13 这个code。
所以reboot,重新进入CFE。
操作命令如下
1 2 3 4 |
CFE> devinfo unset ccode CFE> devinfo commit CFE> nvram erase CFE> reboot |
进入系统后,终于看到新的频道被释放出来了。
RT-AC68U 使用PPPoE拨号上网,但是分配的IP是100.64.204.111, 看着像公网IP实际却是Carrier-grade NAT.
现在需要将RT-AC68U与一台在公网的EdgeRouter使用OpenVPN Site-to-Site连接起来,并在RT-AC68U端实现policy-based routing。
需要让RT-AC68U下的所有设备能访问EdgeRouter LAN的网络,并根据需求透过VPS访问指定互联网。
本实验参考下列文章:
Set up OpenVPN Site-to-Site on UBNT EdgeRouter Lite
EdgeRouter OpenVPN Connectivity Monitor
EdgeRouter 策略路由实现分析
EdgeRouter Policy Based Routing Using DNSMASQ IPSET
Continue reading “OpenVPN Site-to-Site VPN between Asus Merlin And Ubnt EdgeRouter” »
从 https://github.com/Lochnair/vyatta-wireguard/releases 下载对应的包
ERL, ER等 mips架构的,下载 octeon 版本
ERX 下载 ralink版本。
可以选择上传到路由上,或者ssh登录路由,sudo su到root,执行类似如下的命令
1 |
curl https://github.com/Lochnair/vyatta-wireguard/releases/download/0.0.20170612-2/wireguard-octeon-0.0.20170612-2.deb -o wireguard-octeon-0.0.20170612-2.deb |
或
1 |
curl https://github.com/Lochnair/vyatta-wireguard/releases/download/0.0.20170612-2/wireguard-ralink-0.0.20170612-2.deb -o wireguard-ralink-0.0.20170612-2.deb |
下载完成后
1 |
dpkg -i xxx.deb |
执行下列命令生成私钥、共享密钥,公钥
1 2 3 4 |
wg genkey > /config/auth/wg.private wg genpsk > /config/auth/wg.psk chmod 0600 /config/auth/wg.* wg pubkey < /config/auth/wg.private |
将最后一个命令的输出复制下来,配置到服务器端
获取服务器端的公钥,替换下文的“公钥”并执行命令
1 2 3 4 5 6 7 8 9 10 |
configure set interfaces wireguard wg0 address 192.168.10.40/24 set interfaces wireguard wg0 listen-port 本地端口 set interfaces wireguard wg0 peer 公钥 allowed-ips 0.0.0.0/0 set interfaces wireguard wg0 peer 公钥 endpoint '服务器IP:端口' set interfaces wireguard wg0 peer 公钥 preshared-key /config/auth/wg-eos.psk set interfaces wireguard wg0 private-key /config/auth/wg.private set interfaces wireguard wg0 route-allowed-ips false commit save |
配置好设备后,配置nat服务
1 2 3 4 5 |
configure set service nat rule 5032 outbound-interface wg0 set service nat rule 5032 type masquerade commit save |
剩下就是配置路由规则了,可以参考我的其他blog.