我的家庭网络

这段时间升级了家庭网络,鼓捣了x86软路由,给部分设备配置自动分流以及配套的的DNS分流。

由于自己使用,直接使用主路由的形式。
下面是本次使用到的相关组件:

  • immortalwrt:更适合国内的 OpenWRT,内核直接支持 dae
  • dae:性能超高的内核透明代理方案
  • daed:提供 daeweb 控制面
  • luci-app-daeddaed 对应的 OpenWRT UI 插件
  • smartdns: 提供基于规则的 DNS 请求分流
  • luci-app-smartdnssmartdns对应的 OpenWRT UI 插件
  • AdGuardHome:广告屏蔽,以及查看 DNS 解析 IP
  • adguardhomeadguardhome 对应的 OpenWRT UI 插件
  • wireguard:最好用的VPN!
  • luci-proto-wireguardWireguard 对应的 OpenWRT UI 插件

流量示意图

DNS查询请求

DNS查询请求Client客户端Router路由器Client->RouterDaeDaeRouter->Dae劫持DNS请求AdGuardHomeAdGuardHome:53Dae->AdGuardHome转发SmartDNSSmartDNS默认监听::6053第二DNS::5335AdGuardHome->SmartDNS转发BlackHoleBlackHoleAdGuardHome->BlackHole广告相关DNS丢弃Ali_DNSAli DNS223.5.5.5:53SmartDNS->Ali_DNS直接发起请求Google_DNSGoogle DNS8.8.8.8:53SmartDNS->Google_DNS通过dae代理向外请求
DNS查询请求

网络传输

特定客户端网络流量Client特定客户端Router路由器Client->RouterDaeDaeRouter->Dae转发代理出口代理出口Dae->代理出口分流路由表路由表Dae->路由表直连国内出口国内出口路由表->国内出口默认Wireguard其他网段路由表->Wireguard特定IP段
特定客户端网络流量
普通客户端网络流量Client普通客户端Router路由器Client->RouterDaeDaeRouter->Dae转发路由表路由表Dae->路由表直连国内出口国内出口路由表->国内出口默认WireguardWireguard路由表->Wireguard特定IP段
普通客户端网络流量

配置

Immortalwrt 配置

安装教程很多,我使用的immortalwrt-23.05.4-x86-64-generic-ext4-combined-efi.img,安装在 N100ESXi 中。
ESXi 载入后使用 gparted 扩盘到2G

smartdns

上游服务器

两组或更多组的服务器,根据域名进行分类。
一般规则默认是命中 gfw.list 中的域名专门走海外DNS,剩余使用国内DNS查询

名称IP类型服务器组
CN-阿里-DOHhttps://223.5.5.5/dns-queryhttps
CN-阿里-DOH2https://223.6.6.6/dns-queryhttps
CN-腾讯-DOHhttps://1.12.12.12/dns-queryhttps
CN-腾讯-DOH2https://120.53.53.53/dns-queryhttps
GW-谷歌-DOHhttps://8.8.8.8/dns-queryhttpsfq_dns
GW-谷歌-DOH2https://8.8.4.4/dns-queryhttpsfq_dns
GW-CF-DOHhttps://1.1.1.1/dns-queryhttpsfq_dns
GW-CF-DOH2https://1.0.0.1/dns-queryhttpsfq_dns

第二DNS服务器配置

第二服务器是不会进行分流的,都会通过服务器组配置走流量

  • 开启配置 停用IPV6地址解析
  • 修改 服务器组fq_dns

下载文件配置

这里用来下载远端配置文件,并且定时更新
主要来自 V2Ray 路由规则加强版
这里额外下载了 geositegeoip 在dae中会用到

文件名地址类型注释
geosite.dathttps://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat其他文件geosite.dat
geoip.dathttps://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat其他文件geoip.dat
gfw.txthttps://raw.githubusercontent.com/Loyalsoldier/v2ray-rules-dat/release/gfw.txt域名列表GFWList 域名列表
apple-cn.txthttps://raw.githubusercontent.com/Loyalsoldier/v2ray-rules-dat/release/apple-cn.txt域名列表Apple 在中国大陆可直连的域名列表
google-cn.txthttps://raw.githubusercontent.com/Loyalsoldier/v2ray-rules-dat/release/google-cn.txt域名列表Google 在中国大陆可直连的域名列表
direct-list.txthttps://raw.githubusercontent.com/Loyalsoldier/v2ray-rules-dat/release/direct-list.txt域名列表直连域名列表
china-list.txthttps://raw.githubusercontent.com/Loyalsoldier/v2ray-rules-dat/release/china-list.txt域名列表@felixonmars/dnsmasq-china-list 仓库收集的在中国大陆可直连的域名列表
proxy-list.txthttps://raw.githubusercontent.com/Loyalsoldier/v2ray-rules-dat/release/proxy-list.txt域名列表代理域名列表
win-update.txthttps://raw.githubusercontent.com/Loyalsoldier/v2ray-rules-dat/release/win-update.txt域名列表Windows 操作系统使用的系统升级域名列表

域名规则配置

这里可以基于上面下载的域名文件来进行分流
无其实是走默认,可以不配置

规则名称服务器组域名列表文件
gfw.txtfq_dns/etc/smartdns/domain-set/gfw.txt
proxy-list.txtfq_dns/etc/smartdns/domain-set/proxy-list.txt
china-list.txt/etc/smartdns/domain-set/china-list.txt
win-update.txt/etc/smartdns/domain-set/win-update.txt
google-cn.txt/etc/smartdns/domain-set/google-cn.txt
apple-cn.txt/etc/smartdns/domain-set/apple-cn.txt

AdGuardHome

  • 上游DNS服务器 -> udp://127.0.0.1:6053
  • 监听端口 -> 53

Dnsmasq

由于更改 AdGuardHome53 监听,需要将 Dnsmasp 的DNS服务器端口设置0。才能启动

DHCP

由于关闭 DnsmasqDNS Server,在默认的 DHCP 不会下发默认 DNS Server
需要在 接口|DHCP|高级设置|DHCP选项 加上 6, + DNS Server IP;如 6,10.0.0.0 通告额外 DNS Server

DAED 配置

geoip & geosite 自动更新

使用 ln -s, 将 SmartDNS下载的 dat 文件,软链到 /etc/daed

1
2
ln -s /etc/smartdns/download/geoip.dat /etc/daed/geoip.dat
ln -s /etc/smartdns/download/geosite.dat /etc/daed/geosite.dat

Global

  • 连接选项 | 拨号模式 -> domain+
  • 连接选项 | TLS实现 -> utls
  • 连接选项 | uTLS模仿 -> chrome_auto

DNS

1
2
3
4
5
6
7
8
upstream {
adguard: 'udp://127.0.0.1:53'
}
routing {
request {
fallback: adguard
}
}

路由

路由由以下几个部分组成,优先配置直连的规则,最后使用分流兜底。

DNS相关配置

dae 默认会劫持DNS请求,使用 must_direct 代表请求不会被劫持
这里 pname 指的是 Openwrt 中跑的进程,可以用 ps 找到

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 进程级的豁免
pname(NetworkManager, systemd-resolved, dnsmasq) -> must_direct
pname(AdGuardHome) -> must_direct
pname(smartdns) && l4proto(udp) && dport(53) -> must_direct

# CN DOH 不走代理
dip(223.5.5.5/32) -> direct
dip(223.6.6.6/32) -> direct
dip(1.12.12.12/32) -> direct
dip(120.53.53.53/32) -> direct

# GW DOH 走代理
dip(8.8.8.8/32) -> proxy
dip(8.8.4.4/32) -> proxy
dip(1.1.1.1/32) -> proxy
dip(1.0.0.1/32) -> proxy

客户机直连设置

我的网段为 30.1.0.0/22,普通设备没有分流需求,所以做额外指定

1
2
3
4
5
6
7
# Client

# 在 30.1.0.0/22 范围内,除了 `30.1.1.0/25` 的IP段都直接访问网络
sip(30.1.0.0/22) && !sip(30.1.1.0/25)-> direct

# 也可以使用 mac 分流
mac('00:00:00:00:00:00') -> direct

内网地址直连

1
2
3
4
5
6
7
# LOCAL

# 可选,我的内网范围在 `30.0.0.0/8` 是属于 `DOD` 的IP网段,所以得直连。
dip(30.0.0.0/8) -> direct

dip(geoip:private) -> direct

分流规则

1
2
3
4
5
6
7
8
9
10
# 国内网段直连
dip(geoip:cn) -> direct

domain(geosite:apple-cn) -> direct
domain(geosite:gfw) -> proxy
domain(geosite:china-list) -> direct
domain(geosite:cn) -> direct

# 兜底
fallback: proxy

WireGuard Client 配置

  • 新增一个 Interface,协议选择 WireGuard VPN。配置好相关参数。
  • 新增防火墙WG,开启 MSS 钳制。参考 OpenWrt 中的 MSS 钳制是干什么用的
  • 新增 LAN->WG 转发,参考 LAN-> WAN 的规则

详细配置如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# /etc/config/network
config interface 'wg'
option proto 'wireguard'
option private_key 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx='
list addresses '30.xx.1.0/32'
list addresses 'xxxx:xxxx:7:0:1::1/128'
option mtu '1280'

config wireguard_wg
option public_key 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx='
option persistent_keepalive '21'
option endpoint_host '30.xx.1.xx'
option endpoint_port '655xx'
option route_allowed_ips '1'

list allowed_ips '30.xx.0.0/18'
list allowed_ips '10.0.0.0/8'
list allowed_ips 'fe80::/64'
list allowed_ips 'fdbd::/16'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# /etc/config/firewall
config zone
option name 'wg'
option input 'REJECT'
option output 'ACCEPT'
option forward 'REJECT'
list network 'wg'
option masq '1'
option masq6 '1'
option mtu_fix '1'

config forwarding
option src 'lan'
option dest 'wg'
作者

Kur4ge

发布于

2024-11-23

更新于

2024-11-23

许可协议

评论