|  |  | @ -32,12 +32,38 @@ IPv6部分,由于路由器桥接,地址分配等操作均为光猫负责, | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 这也是IPv6在代理方面的缺点,它将发送 RA 广播的链路地址直接视为路由网关,且该地址无法通过其他协议更改,我们没法像 DHCPv4 一样直接配置网关地址,这在透明代理时远没有 IPv4 方便,只能将 RA 广播源放在网关上。 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | ### 配置XProxy | 
			
		
	
		
			
				
					|  |  |  | ### 启动服务 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 在设计上,应该配置四个出口,分别为 IPv4直连、IPv4代理、IPv6直连、IPv6代理,这里创建 4 个对应的 socks5 入口 `direct` 、`proxy` 、`direct6` 、`proxy6` ,用于检测对应出口是否正常工作。 | 
			
		
	
		
			
				
					|  |  |  | 首先创建 macvlan 网络: | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | ``` | 
			
		
	
		
			
				
					|  |  |  | # 宿主机网卡假定为 eth0 | 
			
		
	
		
			
				
					|  |  |  | shell> ip link set eth0 promisc on | 
			
		
	
		
			
				
					|  |  |  | shell> modprobe ip6table_filter | 
			
		
	
		
			
				
					|  |  |  | # IPv6网段后续由XProxy更改,这里可以随意指定 | 
			
		
	
		
			
				
					|  |  |  | shell> docker network create -d macvlan --subnet=fe80::/10 --ipv6 -o parent=eth0 macvlan | 
			
		
	
		
			
				
					|  |  |  | ``` | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 将配置文件保存在 `/etc/route` 目录下,使用以下命令开启 XProxy 服务: | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | ``` | 
			
		
	
		
			
				
					|  |  |  | shell> docker run --restart always \ | 
			
		
	
		
			
				
					|  |  |  |   --privileged --network macvlan -dt \ | 
			
		
	
		
			
				
					|  |  |  |   --name route --hostname route \ | 
			
		
	
		
			
				
					|  |  |  |   --volume /etc/route/:/xproxy/ \ | 
			
		
	
		
			
				
					|  |  |  |   --volume /etc/timezone:/etc/timezone:ro \ | 
			
		
	
		
			
				
					|  |  |  |   --volume /etc/localtime:/etc/localtime:ro \ | 
			
		
	
		
			
				
					|  |  |  |   dnomd343/xproxy:latest | 
			
		
	
		
			
				
					|  |  |  | ``` | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | ### 参数配置 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 在设计上,应该配置四个出口,分别为 IPv4直连、IPv4代理、IPv6直连、IPv6代理,这里创建 4 个对应的 socks5 接口 `direct` 、`proxy` 、`direct6` 、`proxy6` ,用于检测对应出口是否正常工作。 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 此外,我们需要判断 IP 与域名的地理信息,而该数据库一直变动,需要持续更新;由于该项目的 Github Action 配置为 UTC 22:00 触发,即 UTC8+ 的 06:00 ,所以这里配置为每天早上 06 点 05 分更新,延迟 5 分钟拉取当日的新版本路由资源。 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 修改 `xproxy.yml` ,写入以下配置: | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | ```yaml | 
			
		
	
		
			
				
					|  |  |  | proxy: | 
			
		
	
		
			
				
					|  |  |  |   log: info | 
			
		
	
	
		
			
				
					|  |  | @ -83,3 +109,116 @@ update: | 
			
		
	
		
			
				
					|  |  |  |     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" | 
			
		
	
		
			
				
					|  |  |  | ``` | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | ### 代理配置 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 配置出站代理,修改 `config/outbounds.json` 文件,其中 direct 直连到国内网络,proxy 填入代理服务器参数: | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | ```json | 
			
		
	
		
			
				
					|  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |   "outbounds": [ | 
			
		
	
		
			
				
					|  |  |  |     { | 
			
		
	
		
			
				
					|  |  |  |       "tag": "direct4", | 
			
		
	
		
			
				
					|  |  |  |       "protocol": "freedom", | 
			
		
	
		
			
				
					|  |  |  |       "settings": { | 
			
		
	
		
			
				
					|  |  |  |         "domainStrategy": "UseIP" | 
			
		
	
		
			
				
					|  |  |  |       } | 
			
		
	
		
			
				
					|  |  |  |     }, | 
			
		
	
		
			
				
					|  |  |  |     { | 
			
		
	
		
			
				
					|  |  |  |       "tag": "direct6", | 
			
		
	
		
			
				
					|  |  |  |       "protocol": "freedom", | 
			
		
	
		
			
				
					|  |  |  |       "settings": { | 
			
		
	
		
			
				
					|  |  |  |         "domainStrategy": "UseIP" | 
			
		
	
		
			
				
					|  |  |  |       } | 
			
		
	
		
			
				
					|  |  |  |     }, | 
			
		
	
		
			
				
					|  |  |  |     { | 
			
		
	
		
			
				
					|  |  |  |       "tag": "proxy4", | 
			
		
	
		
			
				
					|  |  |  |       ... | 
			
		
	
		
			
				
					|  |  |  |     }, | 
			
		
	
		
			
				
					|  |  |  |     { | 
			
		
	
		
			
				
					|  |  |  |       "tag": "proxy6", | 
			
		
	
		
			
				
					|  |  |  |       ... | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |   ] | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | ``` | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 接着配置路由部分,让暴露的 4 个 socks5 接口对接上,并依据上文的分流方式编写路由规则;创建 `config/routing.json` 文件,写入以下配置: | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | ```json | 
			
		
	
		
			
				
					|  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |   "routing": { | 
			
		
	
		
			
				
					|  |  |  |     "domainStrategy": "IPOnDemand", | 
			
		
	
		
			
				
					|  |  |  |     "rules": [ | 
			
		
	
		
			
				
					|  |  |  |       { | 
			
		
	
		
			
				
					|  |  |  |         "type": "field", | 
			
		
	
		
			
				
					|  |  |  |         "inboundTag": ["direct"], | 
			
		
	
		
			
				
					|  |  |  |         "outboundTag": "direct4" | 
			
		
	
		
			
				
					|  |  |  |       }, | 
			
		
	
		
			
				
					|  |  |  |       { | 
			
		
	
		
			
				
					|  |  |  |         "type": "field", | 
			
		
	
		
			
				
					|  |  |  |         "inboundTag": ["direct6"], | 
			
		
	
		
			
				
					|  |  |  |         "outboundTag": "direct6" | 
			
		
	
		
			
				
					|  |  |  |       }, | 
			
		
	
		
			
				
					|  |  |  |       { | 
			
		
	
		
			
				
					|  |  |  |         "type": "field", | 
			
		
	
		
			
				
					|  |  |  |         "inboundTag": ["proxy"], | 
			
		
	
		
			
				
					|  |  |  |         "outboundTag": "proxy4" | 
			
		
	
		
			
				
					|  |  |  |       }, | 
			
		
	
		
			
				
					|  |  |  |       { | 
			
		
	
		
			
				
					|  |  |  |         "type": "field", | 
			
		
	
		
			
				
					|  |  |  |         "inboundTag": ["proxy6"], | 
			
		
	
		
			
				
					|  |  |  |         "outboundTag": "proxy6" | 
			
		
	
		
			
				
					|  |  |  |       }, | 
			
		
	
		
			
				
					|  |  |  |       { | 
			
		
	
		
			
				
					|  |  |  |         "type": "field", | 
			
		
	
		
			
				
					|  |  |  |         "inboundTag": ["tproxy"], | 
			
		
	
		
			
				
					|  |  |  |         "domain": ["geosite:cn"], | 
			
		
	
		
			
				
					|  |  |  |         "outboundTag": "direct4" | 
			
		
	
		
			
				
					|  |  |  |       }, | 
			
		
	
		
			
				
					|  |  |  |       { | 
			
		
	
		
			
				
					|  |  |  |         "type": "field", | 
			
		
	
		
			
				
					|  |  |  |         "inboundTag": ["tproxy6"], | 
			
		
	
		
			
				
					|  |  |  |         "domain": ["geosite:cn"], | 
			
		
	
		
			
				
					|  |  |  |         "outboundTag": "direct6" | 
			
		
	
		
			
				
					|  |  |  |       }, | 
			
		
	
		
			
				
					|  |  |  |       { | 
			
		
	
		
			
				
					|  |  |  |         "type": "field", | 
			
		
	
		
			
				
					|  |  |  |         "inboundTag": ["tproxy"], | 
			
		
	
		
			
				
					|  |  |  |         "ip": [ | 
			
		
	
		
			
				
					|  |  |  |           "geoip:cn", | 
			
		
	
		
			
				
					|  |  |  |           "geoip:private" | 
			
		
	
		
			
				
					|  |  |  |         ], | 
			
		
	
		
			
				
					|  |  |  |         "outboundTag": "direct4" | 
			
		
	
		
			
				
					|  |  |  |       }, | 
			
		
	
		
			
				
					|  |  |  |       { | 
			
		
	
		
			
				
					|  |  |  |         "type": "field", | 
			
		
	
		
			
				
					|  |  |  |         "inboundTag": ["tproxy6"], | 
			
		
	
		
			
				
					|  |  |  |         "ip": [ | 
			
		
	
		
			
				
					|  |  |  |           "geoip:cn", | 
			
		
	
		
			
				
					|  |  |  |           "geoip:private" | 
			
		
	
		
			
				
					|  |  |  |         ], | 
			
		
	
		
			
				
					|  |  |  |         "outboundTag": "direct6" | 
			
		
	
		
			
				
					|  |  |  |       }, | 
			
		
	
		
			
				
					|  |  |  |       { | 
			
		
	
		
			
				
					|  |  |  |         "type": "field", | 
			
		
	
		
			
				
					|  |  |  |         "inboundTag": ["tproxy"], | 
			
		
	
		
			
				
					|  |  |  |         "outboundTag": "proxy4" | 
			
		
	
		
			
				
					|  |  |  |       }, | 
			
		
	
		
			
				
					|  |  |  |       { | 
			
		
	
		
			
				
					|  |  |  |         "type": "field", | 
			
		
	
		
			
				
					|  |  |  |         "inboundTag": ["tproxy6"], | 
			
		
	
		
			
				
					|  |  |  |         "outboundTag": "proxy6" | 
			
		
	
		
			
				
					|  |  |  |       } | 
			
		
	
		
			
				
					|  |  |  |     ] | 
			
		
	
		
			
				
					|  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | ``` | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 重启 XProxy 容器使配置生效: | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | ``` | 
			
		
	
		
			
				
					|  |  |  | shell> docker restart route | 
			
		
	
		
			
				
					|  |  |  | ``` | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 最后,验证代理服务是否正常工作,若出现问题可以查看 `/etc/route/log` 文件夹下的日志,定位错误原因。 | 
			
		
	
	
		
			
				
					|  |  | 
 |