J4125 All In One主机安装软路由和代理分流的网络配置
本期为软路由系列的第二期,介绍All In One主机的网络环境与软路由网络相关配置。分为主路由的网络网络配置与旁路由的代理分流配置。
网络架构
网络拓扑
结合上期,位于客厅的软路由下接8+1光交换机,并用光纤连接至位于弱电箱的交换机用于连接各网络面板。两交换机间另使用网线相连作为冗余备用,这要求环路中的其中一台交换机具有环路功能。
布网时每个86面板预留一条CAT6网线和两条单模光纤,光模块选择拆机LC双纤光模块。
网络设备
- 网线:使用24AWG CAT6网线,穿线最多能2条网线1条光纤。若允许更粗网线可选择大唐电信的23AWG CAT6网线。
光纤:布线使用单模单纤光电复合缆,因此每管需要穿2条光纤。光电复合缆仅为了预留未来需求,相较光纤皮线更软更易盘旋。也可以选择并缆的单模单芯蝶形光纤。选择穿两条光纤是因为拆机二手双LC的光模块更便宜,光纤两侧直接打LC的冷接头。冷接子注意淘宝可以购买光电复合缆专用的LC冷接子,比普通光纤皮线的冷接子夹得更紧,需要预留的裸纤和涂覆层长度也与普通光纤皮线不同。
光纤冷接还需要红光笔+SC/LC转接头以测试通断。
冷接实战教程参见:家庭万兆光纤网络布网实践,附带光纤冷接教程,让光纤铺满你家,提前感受FTTR!_哔哩哔哩_bilibili 、秒掉5G?光纤布网战未来!Fiber Optical Yes!_哔哩哔哩_bilibili、万兆光纤布网实战攻略,让光纤铺满你家!_哔哩哔哩_bilibili
面板:末端光纤冷接,可以直接选择如下的法兰,插在普通的两口网络面板上。注意不要买倾斜开口的面板,这会导致打好冷接头的光纤由于86暗盒空间限制而不能插在面板上。若平式面板依然空间不足,可以考虑使用下面的异型86面板,将光纤盘在明盒中。
交换机:兮克2.5G交换机 8+1光 非管理(SKS1200-8GPY1XF)、8+1光管理型(SKS3200M-8GPY1XF)
- PC:另购2.5G螃蟹8156bUSB网卡,网卡驱动下载参见:TANK TR8156N Realtek USB RTL8156B 2.5G网卡 全系统驱动安装使用教程 - Tank电玩&米多贝克 (mi-d.cn),这种2.5G网卡只是用默认驱动会导致不能跑满带宽。
主路由设置
DHCP与DNS配置
内网中架设AdGuard Home负责DNS解析,因此将路由DNS指向AdGuard服务器,并勾选DNS加速
为了区分正常用户与需要走旁路由代理的用户,将路由分为两个DHCP池,普通用户网关为主路由,DNS指向AdGuard;需要走代理的用户通过DHCP与MAC绑定接入第二个DHCP池,网关、DNS指向旁路由。这样即便旁路由挂了也不影响正常设备上网。
内网访问光猫
使路由能够DHCP到光猫的网段IP,能够互相通信。
内外网设置
——外网设置WAN1
,接入方式选择基于物理网卡的混合模式
,添加PPPoE拨号配置adsl1
,同时添加DHCP配置vwan1
。将PPPoE设置开启默认网关。这样软路由的WAN口会获取到光猫DHCP分配的IP地址。
防火墙
参见: iKuai爱快的IPv6防火墙设置,允许规则优先于阻断。iKuai默认不启用IPv6防火墙,必须要添加的规则:
- 禁止公网通过IPv6访问本地
- 允许本地通过IPv6访问公网
- 允许特定协议/端口通过IPv6访问内网特定用户
::32c/::FFFF:FFFF:FFFF:FFFF #nginx
::741/::FFFF:FFFF:FFFF:FFFF #qbittorrent
::b05/::FFFF:FFFF:FFFF:FFFF #debian12
应用访问控制
在路由层面上禁用STUN、P2P和去广告。网页端阻止泄露IP可以使用防WebRTC泄露插件:WebRTC Control (google.com)等
接下来是代理与分流配置。
主路由代理分流(不采用)
参考:iKuai与Openwrt的有机结合:传统旁路由方案的完美替代 | JackieWu
缺点:主路由分出两个WAN口,代理数据多走一层NAT
旁路由代理分流
旁路由使用OpenClash软件做代理,同时在旁路由上启用基于DNS或流量嗅探的分流,使中国大陆的流量不过核心。
iStore扩展插件包: https://github.com/AUK9527/Are-u-ok/tree/main/x86
防火墙分流
iptables 只通过国内ipv6:探讨下有没有国内流量保留 ipv6, 国外流量禁用 ipv6 的优雅姿势 - V2EX,仅作参考
ip6tables -F FORWARD
ip6tables -I FORWARD -d 240e::/18 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
ip6tables -A FORWARD -d 2408:8000::/20 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
ip6tables -A FORWARD -d 2409:8000::/20 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
ip6tables -A FORWARD -d 240a:c000::/20 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
ip6tables -A FORWARD -d 240c:c000::/20 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
ip6tables -A FORWARD -d 240a:4000::/21 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
ip6tables -A FORWARD -d 240a:8000::/21 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
ip6tables -A FORWARD -d 240b:8000::/21 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
ip6tables -A FORWARD -d 240c:8000::/21 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
ip6tables -A FORWARD -d 240d:4000::/21 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
ip6tables -A FORWARD -d 2408:4000::/22 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
ip6tables -A FORWARD -d 240c:4000::/22 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
ip6tables -A FORWARD -d 240d:8000::/24 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
ip6tables -A FORWARD -d 240f:4000::/24 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
ip6tables -A FORWARD -d 240f:8000::/24 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
ip6tables -A FORWARD -d 2400:dd00::/28 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
ip6tables -A FORWARD -d 240c::/28 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
ip6tables -A FORWARD -d 2001:4510::/29 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
ip6tables -A FORWARD -d 2400:a980::/29 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
ip6tables -A FORWARD -d 2a0c:f480::/29 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
ip6tables -A FORWARD -d 2a0d:2480::/29 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
ip6tables -A FORWARD -d 2406:cf00::/30 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
ip6tables -A FORWARD -d 2001:250::/31 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
ip6tables -A FORWARD -d 2001:da8::/31 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
ip6tables -A FORWARD -d 2403:800::/31 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
ip6tables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
ip6tables -A FORWARD -j REJECT
MosDNS分流
在旁路由上搭建MosDNS服务器来做DNS分流。
参考:
AdGuard-->MosDNS-->dnsmasq(主路由):基于 DNS 的内网透明代理分流方案 (songchenwen.com)
AdGuard-->dnsmasq-->MosDNS:OPenWRT 旁路由+MosDNS+open克拉什+AdGuard Home 傻瓜配置图文教程-恩山无线论坛
搭建公网DNS服务器:利用 Mosdns 和 AdGuardHome 搭建自己的 DNS (xukecheng.tech)
dnsmasq-->OpenClash-->AdGuard-->MosDNS:OpenWrt: OpenClash + AdGuardHome + MosDNS + IPv6 共存配置
这里采用的方案:AdGuard-->dnsmasq-->MosDNS-->OpenClash Fake-IP,不需要分流的设备使用AdGuard192.168.2.11
,利用缓存和DoH/DoT请求国内DNS;需分流设备送至旁路由192.168.2.2
,经MosDNS分流后决定走Clash或是国内。
graph TD
subgraph s1[AdGuard 192.168.2.11]
B(AdGuard <br>53)
end
subgraph s2[旁路由 192.168.2.2]
C(dnsmasq <br>53)
D(MosDNS <br> 5335)
F[Fallback]
Cl(Clash Fake-IP <br> 7874)
R[\Drop IPv6/]
end
A1[DNS Request]-->B
B-->|需分流设备|C
B--->|不分流设备|L
A[DNS Request]--->C-->D
D-->|国内ip|L[国内上游DNS]
D-->|国内域名|L
D-->|白名单|L
D-->|未知|F[Fallback]
F-->|国内ip|L
F-->|国外ip|R
D-->|国外ip|R
D-->|国外域名|R
D-->|黑名单|R
R-->Cl-->Out[国外上游DNS]
缺点:AdGuard与MosDNS处均有缓存
优点:旁路由失效不影响正常设备上网
本方式还需要设置OpenClash防火墙规则,只允许fake-ip
ip流量转发到Clash
iptables -t nat -D openclash -p tcp -j REDIRECT --to-ports $proxy_port
#iptables -t nat -A openclash -m set --match-set telegram dst -p tcp -j REDIRECT --to-ports $proxy_port
Clash DNS分流
采取方案:dnsmasq-->OpenClash-->AdGuard,用Clash的绕过大陆功能代替MosDNS分流。
启用OpenClash的绕过中国大陆功能,自定义DNS里Nameserver仅开启AdGuard Home,Fallback可勾选Cloudflare相关的。
- DNS请求流程:
graph LR
subgraph s1[AdGuard LXC 192.168.2.11]
B(AdGuard <br>53)
end
subgraph s2[旁路由 192.168.2.2]
C(dnsmasq <br>53)
D(Clash DNS <br> 7874)
F[Fallback]
Cl(Clash Redirect <br> 7892)
end
A1[DNS Request]---->B
B--->|General|L[国内上游DNS <br> DoH DoT]
B-.->|需分流设备|C
A[DNS Request]-->C-->D
D-->|国内域名|B
Cl-->Out[国外上游DNS <br> DoH DoT]
D-->|国外域名|Cl
D-->|未知|F-->Cl
- 流量转发流程:
graph LR
A[tcp udp包]
subgraph s1[旁路由 192.168.2.2]
fw[防火墙]-->|国外ip|R
fw-->|国外域名|R
fw-->|命中规则|R
fw--->|国内ip|C(出口)
fw--->|国内域名|C
R{{Drop IPv6}}-->B
B(Clash Redirect <br> 7892)
end
subgraph s2[主路由 192.168.2.1]
NAT(NAT)
end
NAT-->Internet
A-->fw
B-->|代理数据|NAT
C-->|原数据|NAT
Openclash自动添加的NAT表
-A openclash -m set --match-set localnetwork dst -j RETURN
-A openclash -m set --match-set china_ip_route dst -m set ! --match-set china_ip_route_pass dst -j RETURN
-A openclash -p tcp -j REDIRECT --to-ports 7892
-A openclash_output -d 198.18.0.0/16 -p tcp -m owner ! --uid-owner 65534 -j REDIRECT --to-ports 7892
-A openclash_output -m set --match-set localnetwork dst -j RETURN
-A openclash_output -m owner ! --uid-owner 65534 -m set --match-set china_ip_route dst -m set ! --match-set china_ip_route_pass dst -j RETURN
-A openclash_output -p tcp -m owner ! --uid-owner 65534 -j REDIRECT --to-ports 7892
国内流量不过Clash核心。
AdGuard
配置上游DNS并开启乐观缓存。
国内上游DNS:阿里DNS over HTTP3、DoT,dnspod DoH DoT
# ali http3 h3://223.5.5.5/dns-query h3://223.6.6.6/dns-query # ali dot tls://223.5.5.5 tls://223.6.6.6 # dnspod dot tls://1.12.12.12 tls://120.53.53.53 # dnspod doh https://1.12.12.12/dns-query https://120.53.53.53/dns-query
广告屏蔽
订阅国内广告列表:GitHub - 217heidai/adblockfilters: 适用于AdGuard的去广告合并规则,每8个小时更新一次。
若观看斗鱼虎牙等PCDN直播卡顿,可用白名单放行:[误杀]虎牙、斗鱼有些直播间由于拦截,打开会很慢 · Issue #254 · privacy-protection-tools/anti-AD · GitHub
Surge/Loon/Quantumult x
这些软件可在iOS客户端运行或在Mac mini上运行,充当软路由。与Clash相比在于多了插件/模块,可用于URL重写/中间人攻击/脚本,进而精确地去广告或解除地区限制。
推荐几个好用的Loon插件/模块/脚本:
- iRingo:GitHub - VirgilClyne/iRingo: 解锁完整的 Apple功能和集成服务
- Loon插件仓库:GitHub - Peng-YM/Loon-Gallery: Loon Plugin Gallery / Loon 插件仓库
- BoxJS:介绍 - BoxJs
Open Clash设置
Open Clash官方Wiki:https://github.com/vernesong/OpenClash/wiki/
配置文件结构
proxies
节点列表,包括机场订阅和自建节点
proxies-group
策略组,用于选择特定服务的出口
select
手动选择url-test
自动选择延迟最低的节点苹果
选择特定服务的出口proxies-provider
订阅来源
rules
规则
RULE-SET,Spotify: 直连
RULE-SET,Apple: 苹果
rules-provider
规则集
- Apple
- Telegram
- Spotify
- 游戏
dns
nameserver
fallback
基础设置
订阅、订阅转换
内核、代理模式
DNS、绕过大陆
高级设置
规则集
bbr阻塞控制
linux开启bbr
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf sysctl -p sysctl net.ipv4.tcp_congestion_control