cgproxy和wireguard搭配时使用kdeconnect的网关问题
iusearch opened this issue · comments
情况是在使用wireguard
收集客户端的流量,然后由cgproxy
导到v2ray
实现流量0泄漏和分流。但是测试的时候发现kdeconnect
会出问题,经过分析后发现是kdeconnect-kde
的宿主机接收到了一个来自wireguard
网关的udp包(源ip
由平常的kdeconnect-android
宿主机的ip被改写成了wireguard
网关的ip)。kdeconnect
的机制是顺着udp
解包的宿主机的ip
连回去,用另一对tcp
的参数,导致无法触发由udp
连接构成的NAT
。目前的解决办法是加一条iptables -t mangle -I TPROXY_PRE 1 -d x.x.x.x/x(wireguard网段) -j ACCEPT
使wireguard peer
之间的流量不经过TPROXY处理,以及iptables -t nat -D POSTROUTING -m owner ! --socket-exists -j MASQUERADE
关掉这个MASQURADE
。不是很清楚后者的作用,但是目前为止所有分流和kdeconnect都运行正确。
iptables -t nat -A POSTROUTING -m owner ! --socket-exists -j MASQUERADE
好像跟docker有关,关了docker端口不通,我再研究研究
不知道咋回事,现在这条不删好像也没关系
是我傻了,这个不是cgproxy
的问题,应该放在wireguard
里边,一条是 iptables -t mangle -A PREROUTING -d x.x.x.x/x(wireguard网段) -j RETURN;
跳过tproxy
处理,另一条是 iptables -t nat -A POSTROUTING -s x.x.x.x/x(wireguard网段) -d x.x.x.x/x(wireguard网段) -j ACCEPT;
, 放在 iptables -t nat -A POSTROUTING -s x.x.x.x/x(wireguard网段) -o %i -j MASQUERADE;
前面用于正确处理内网的NAT
.