From 88789b30f6ea523552b5c022a496521346001e2e Mon Sep 17 00:00:00 2001 From: dnomd343 Date: Sat, 27 Aug 2022 20:16:19 +0800 Subject: [PATCH] docs: add describe of network dev option --- README.md | 35 ++++++++++++++++++++++++++--------- docs/example_1.md | 25 ++++++++++++++----------- docs/example_2.md | 5 ++++- 3 files changed, 44 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index e78285d..872104f 100644 --- a/README.md +++ b/README.md @@ -106,6 +106,7 @@ proxy: ```yaml # 以下配置仅为示范 network: + dev: eth0 dns: - 223.6.6.6 - 119.29.29.29 @@ -126,6 +127,8 @@ network: - 192.168.2.240/28 ``` ++ `dev` :指定运行的网卡,一般与物理网卡同名,默认为空 + + `dns` :指定系统默认 DNS 服务器,留空时保持原配置不变,默认为空 + `ipv4` 与 `ipv6` :指定 IPv4 与 IPv6 的网络信息,其中 `gateway` 为上游网关地址,`address` 为虚拟网关地址(CIDR格式,包含子网长度),不填写时保持不变,默认为空 @@ -152,6 +155,7 @@ network: # 以下配置仅为示范 update: cron: "0 0 4 * * *" # 每天凌晨4点更新 + proxy: "socks5://192.168.2.4:1080" # 通过 socks5 代理更新资源 url: geoip.dat: "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat" geosite.dat: "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat" @@ -159,6 +163,8 @@ update: + `cron` :触发更新的 Cron 表达式,留空时关闭自动升级,默认为空 ++ `proxy` :通过指定的代理服务更新资源文件,留空时直连更新,默认为空 + + `url` :更新的文件名及下载地址,文件保存至 `assets` 中,默认为空 ### 自定义脚本 @@ -168,17 +174,25 @@ update: # fc00::4 tcp/53 & udp/53 <---> fc00::3 tcp/5353 & udp/5353 # 192.168.2.4 tcp/53 & udp/53 <---> 192.168.2.3 tcp/53 & udp/5353 custom: - - "iptables -t nat -A PREROUTING -d 192.168.2.4 -p udp --dport 53 -j DNAT --to-destination 192.168.2.3:5353" - - "iptables -t nat -A POSTROUTING -d 192.168.2.3 -p udp --dport 5353 -j SNAT --to 192.168.2.4" - - "iptables -t nat -A PREROUTING -d 192.168.2.4 -p tcp --dport 53 -j DNAT --to-destination 192.168.2.3:5353" - - "iptables -t nat -A POSTROUTING -d 192.168.2.3 -p tcp --dport 5353 -j SNAT --to 192.168.2.4" - - "ip6tables -t nat -A PREROUTING -d fc00::4 -p udp --dport 53 -j DNAT --to-destination [fc00::3]:5353" - - "ip6tables -t nat -A POSTROUTING -d fc00::3 -p udp --dport 5353 -j SNAT --to fc00::4" - - "ip6tables -t nat -A PREROUTING -d fc00::4 -p tcp --dport 53 -j DNAT --to-destination [fc00::3]:5353" - - "ip6tables -t nat -A POSTROUTING -d fc00::3 -p tcp --dport 5353 -j SNAT --to fc00::4" + pre: + - "iptables -t nat -A PREROUTING -d 192.168.2.4 -p udp --dport 53 -j DNAT --to-destination 192.168.2.3:5353" + - "iptables -t nat -A POSTROUTING -d 192.168.2.3 -p udp --dport 5353 -j SNAT --to 192.168.2.4" + - "iptables -t nat -A PREROUTING -d 192.168.2.4 -p tcp --dport 53 -j DNAT --to-destination 192.168.2.3:5353" + - "iptables -t nat -A POSTROUTING -d 192.168.2.3 -p tcp --dport 5353 -j SNAT --to 192.168.2.4" + - "ip6tables -t nat -A PREROUTING -d fc00::4 -p udp --dport 53 -j DNAT --to-destination [fc00::3]:5353" + - "ip6tables -t nat -A POSTROUTING -d fc00::3 -p udp --dport 5353 -j SNAT --to fc00::4" + - "ip6tables -t nat -A PREROUTING -d fc00::4 -p tcp --dport 53 -j DNAT --to-destination [fc00::3]:5353" + - "ip6tables -t nat -A POSTROUTING -d fc00::3 -p tcp --dport 5353 -j SNAT --to fc00::4" + post: + - "echo Here is post process" + - "echo Goodbye" ``` -自定义脚本命令,在启动代理前将依次执行,用于注入额外功能,默认为空 +> 本功能用于注入自定义功能,基于 Alpine 自带的 ash 执行,可能不支持部分 bash 语法 + ++ `pre` :自定义脚本命令,在代理启动前执行,默认为空 + ++ `post` :自定义脚本命令,在服务关闭前执行,默认为空 ### IPv6路由广播 @@ -188,6 +202,7 @@ custom: # 以下配置仅为示范 radvd: log: 3 + dev: eth0 enable: true option: AdvSendAdvert: on @@ -220,6 +235,8 @@ radvd: + `log` :RADVD 日志级别,可选 `0-5`,数值越大越详细,默认为 `0` ++ `dev` :RADVD 运行的网卡,`enable` 为 `true` 时必选,一般与 `network` 中配置的网卡相同,默认为空 + + `enable` :是否启动 RADVD,默认为 `false` + `option` :RADVD 主选项,完整参数列表查看[这里](https://code.tools/man/5/radvd.conf/#lbAD): diff --git a/docs/example_1.md b/docs/example_1.md index 5918402..9e66a9b 100644 --- a/docs/example_1.md +++ b/docs/example_1.md @@ -8,17 +8,17 @@ 为了方便讲解,我们假设以下典型情况: -+ 校园网交换机无IPv6支持,同时存在QoS ++ 校园网交换机无 IPv6 支持,同时存在 QoS -+ 无认证时允许53端口通行,ICMP流量无法通过 ++ 无认证时允许 53 端口通行,ICMP 流量无法通过 -+ 使用三台公网服务器负载均衡,其53端口上运行有代理服务 ++ 使用三台公网服务器负载均衡,其 53 端口上运行有代理服务 + 三台服务器只有一台支持 IPv4 与 IPv6 双栈,其余只支持 IPv4 ### 代理协议 -首先,从速度上考虑,我们应该选用socks层面的代理,它在代理服务器上的部署更方便,且CPU负载较低,缺点则是ICMP流量无法被代理,不过绝大多数情况下并不会用到公网ICMP流量(例如PING命令);其次,由于存在高峰期QoS,应使用基于TCP的代理协议,此外,为了避开校园网的流量审查,我们应该将流量加密传输;最后,由于软路由性能一般较差,而代理服务器无需考虑协议兼容性问题,我们可以考虑基于 XTLS 的传输方式,它可以显著降低代理 https 流量时的性能开销。 +首先,从速度上考虑,我们应该选用 socks 层面的代理,它在代理服务器上的部署更方便,且 CPU 负载较低,缺点则是 ICMP 流量无法被代理,不过绝大多数情况下并不会用到公网 ICMP 流量(例如 PING 命令);其次,由于存在高峰期 QoS,应使用基于 TCP 的代理协议,此外,为了避开校园网的流量审查,我们应该将流量加密传输;最后,由于软路由性能一般较差,而代理服务器无需考虑协议兼容性问题,我们可以考虑基于 XTLS 的传输方式,它可以显著降低代理 https 流量时的性能开销。 综上,选择 VLESS + XTLS 或者 Trojan + XTLS 代理是当前网络环境下的最优解。 @@ -26,7 +26,7 @@ > 分配 `192.168.2.0/24` 和 `fc00::/64` 给内网使用 -路由器 WAN 口接入学校交换机,构建一个 NAT 转换,代理流量在路由器转发后送到公网服务器的53端口上;假设内网中路由器地址为 `192.168.2.1` ,配置虚拟网关 IPv4 地址为 `192.168.2.2` ,IPv6 地址为 `fc00::2` ;在网关中,无论 IPv4 还是 IPv6 流量都会被透明代理,由于校园网无 IPv6 支持,数据被封装后只通过 IPv4 网络发送,代理服务器接收以后再将其解开,对于 IPv6 流量,这里相当于一个 6to4 隧道。 +路由器 WAN 口接入学校交换机,构建一个 NAT 转换,代理流量在路由器转发后送到公网服务器的 53 端口上;假设内网中路由器地址为 `192.168.2.1` ,配置虚拟网关 IPv4 地址为 `192.168.2.2` ,IPv6 地址为 `fc00::2` ;在网关中,无论 IPv4 还是 IPv6 流量都会被透明代理,由于校园网无 IPv6 支持,数据被封装后只通过 IPv4 网络发送,代理服务器接收以后再将其解开,对于 IPv6 流量,这里相当于一个 6to4 隧道。 ``` # 宿主机网卡假定为 eth0 @@ -72,6 +72,7 @@ proxy: nodeC: 1083 network: + dev: eth0 dns: - 192.168.2.1 ipv4: @@ -89,6 +90,7 @@ network: radvd: log: 5 + dev: eth0 enable: true option: AdvSendAdvert: on @@ -96,12 +98,13 @@ radvd: cidr: fc00::/64 custom: - - "iptables -t nat -N FAKE_PING" - - "iptables -t nat -A FAKE_PING -j DNAT --to-destination 192.168.2.2" - - "iptables -t nat -A PREROUTING -i eth0 -p icmp -j FAKE_PING" - - "ip6tables -t nat -N FAKE_PING" - - "ip6tables -t nat -A FAKE_PING -j DNAT --to-destination fc00::2" - - "ip6tables -t nat -A PREROUTING -i eth0 -p icmp -j FAKE_PING" + pre: + - "iptables -t nat -N FAKE_PING" + - "iptables -t nat -A FAKE_PING -j DNAT --to-destination 192.168.2.2" + - "iptables -t nat -A PREROUTING -i eth0 -p icmp -j FAKE_PING" + - "ip6tables -t nat -N FAKE_PING" + - "ip6tables -t nat -A FAKE_PING -j DNAT --to-destination fc00::2" + - "ip6tables -t nat -A PREROUTING -i eth0 -p icmp -j FAKE_PING" ``` 在开始代理前,我们使用 `custom` 注入了一段脚本配置:由于这里我们只代理 TCP 与 UDP 流量,ICMP 数据包不走代理,内网设备 ping 外网时会一直无响应,加入这段脚本可以创建一个 NAT,假冒远程主机返回成功回复,但实际上 ICMP 数据包并未实际到达,效果上表现为 ping 成功且延迟为内网访问时间。 diff --git a/docs/example_2.md b/docs/example_2.md index 64913f0..ebf5f66 100644 --- a/docs/example_2.md +++ b/docs/example_2.md @@ -18,7 +18,7 @@ 目前路由资源中包含了一份国内常见域名列表,如果嗅探后的域名在其中,那可以直接判定为直连流量,但是对于其他流量,即使它不在列表内,但仍可能是国内服务,我们不能直接将它送往代理服务器;因此下一步我们需要引出分流的核心规则,它取决于 DNS 污染的一个特性:受污染的域名返回解析必然为境外 IP ,基于这个原则,我们将嗅探到的域名使用国内 DNS 进行一次解析,如果结果是国内 IP 地址,那就直连该流量,否则发往代理,IPv4 与 IPv6 均使用该逻辑分流。 -如果有可能的话,您可以在内网搭建一个无污染的解析服务,比如[ClearDNS](https://github.com/dnomd343/ClearDNS),它的作用在于消除 DNS 污染,准确地给出国内外的解析地址,这样子可以在分流时就不用多做一次 DNS 解析,减少这一步导致的延迟(DNS 流量通过代理送出,远程解析以后再返回,其耗时较长且不稳定),无污染 DNS 可以更快更准确地进行分流。 +如果有可能的话,您可以在内网搭建一个无污染的解析服务,比如 [ClearDNS](https://github.com/dnomd343/ClearDNS),它的作用在于消除 DNS 污染,准确地给出国内外的解析地址,这样子可以在分流时就不用多做一次 DNS 解析,减少这一步导致的延迟(DNS 流量通过代理送出,远程解析以后再返回,其耗时较长且不稳定),无污染 DNS 可以更快更准确地进行分流。 ### 网络配置 @@ -78,6 +78,7 @@ proxy: redirect: true network: + dev: eth0 dns: - 192.168.2.1 ipv4: @@ -95,6 +96,7 @@ network: radvd: log: 3 + dev: eth0 enable: true option: AdvSendAdvert: on @@ -105,6 +107,7 @@ radvd: update: cron: "0 5 6 * * *" + proxy: "socks5://192.168.2.2:1094" # 通过代理下载 Github 文件 url: geoip.dat: "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat" geosite.dat: "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat"