旁路由tproxy透明代理后直连网站无法连接
路由器 192.168.1.1 (设定默认网关指向旁路由192.168.1.101) 设备A (旁路由)192.168.1.101 设备B 192.168.1.102 设备C 192.168.1.103 (设定默认网关指向192.168.1.1,即不走旁路由)
#设备A nftables
设置策略路由 ip rule add fwmark 1 table 100 ip route add local 0.0.0.0/0 dev lo table 100
代理局域网设备 nft add table v2ray nft add chain v2ray prerouting { type filter hook prerouting priority 0 ; } nft add rule v2ray prerouting ip daddr {127.0.0.1/32, 224.0.0.0/4, 255.255.255.255/32} return nft add rule v2ray prerouting meta l4proto tcp ip daddr 192.168.0.0/16 return nft add rule v2ray prerouting ip daddr 192.168.0.0/16 udp dport != 53 return nft add rule v2ray prerouting mark 0xff return # 直连 0xff 流量 nft add rule v2ray prerouting meta l4proto {tcp, udp} mark set 1 tproxy to 127.0.0.1:12345 accept # 转发至 V2Ray 12345 端口
代理网关本机 nft add chain v2ray output { type route hook output priority 0 ; } nft add rule v2ray output ip daddr {127.0.0.1/32, 224.0.0.0/4, 255.255.255.255/32} return nft add rule v2ray output meta l4proto tcp ip daddr 192.168.0.0/16 return nft add rule v2ray output ip daddr 192.168.0.0/16 udp dport != 53 return nft add rule v2ray output mark 0xff return # 直连 0xff 流量 nft add rule v2ray output meta l4proto {tcp, udp} mark set 1 accept # 重路由至 prerouting
DIVERT 规则 nft add table filter nft add chain filter divert { type filter hook prerouting priority -150 ; } nft add rule filter divert meta l4proto tcp socket transparent 1 meta mark set 1 accept
#设备A xray config
{ "inbounds": [ { "tag": "all-in", "port": 12345, "protocol": "dokodemo-door", "settings": { "network": "tcp,udp", "followRedirect": true }, "sniffing": { "enabled": true, "destOverride": [ "http", "tls" ] }, "streamSettings": { "sockopt": { "tproxy": "tproxy", "mark": 255 } } } ], "outbounds": [ { "tag": "proxy", "protocol": "vless", "settings": { "vnext": [ { "address": "address", "port": port, "users": [ { "id": "uuid", "encryption": "none" } ] } ] }, "streamSettings": { "sockopt": { "mark": 255 }, "network": "grpc", "security": "tls", "tlsSettings": { "allowInsecure": false, "ServerName": "..." }, "grpcSettings": { "serviceName": "...", "multiMode": true } } }, { "tag": "direct", "protocol": "freedom", "streamSettings": { "sockopt": { "mark": 255 } } }, { "tag": "block", "protocol": "blackhole", "settings": { "response": { "type": "http" } } } ], "routing": { "domainStrategy": "IPIfNotMatch", "domainMatcher": "hybird", "rules": [ { "type": "field", "domain": [ "geosite:category-ads-all" ], "outboundTag": "block" }, { "type": "field", "domain": [ "science.org", "rsc.org" ], "outboundTag": "direct" }, { "type": "field", "inboundTag": [ "all-in" ], "outboundTag": "proxy" } ] } }
#问题描述
学校买了期刊资源如 science,rsc 等,需要直连
设备A 设置完成后,设备B可以访问proxy的网站,如google.com,但直连网站,此例中为science.org,rsc.org无发访问(加到proxy中是可以访问的,但不是学校ip不能下载文献) 此时,设备A ping 任何网址均为 ping: ****.com: Temporary failure in name resolution或者 Destination Host Unreachable,ping 任何IP可通,猜测可能是DNS的问题,不知如何解决。 另:只要默认网关跟随路由器的设定指向192.168.1.101即旁路由设备B,任何设备都无法ping网址。 设备B手动网关指向192.168.1.1即路由器,使用客户端V2rayN,除socks代理外其他xray config 配置和旁路由设备A完全相同,可以访问并下载science.org, rsc.org文献。
为了解决以上问题,曲线救国加入设备C,设备C 默认网关指向路由器即192.168.1.1,因此设备C可以访问任意想要直连的网站(本例中 science.org,rsc.org且有权限下载文献),且ping正常。 设备C安装 xray,设备B 做client 设备C 做 sever 通过任一协议如shadowsocks, socks, vless tcp等等通信,将science.org,rsc.org由设备C代理,此时设备B便可以顺利访问science.org,rsc.org,有一些期刊比如rsc.org是可以顺利访问并且有权限下载文献,但对于一些期刊如science.org,可以访问但是没有权限下载文献(如果使用设备C直接访问是可以下载的)
开启debug看了一下,确实是代理到设备C并freedom直连了,不知道为什么science没有权限下载,在设备B的debug日志中确实转发到了设备C,除此之外有一些UDP 的DNS 查询,不知道是不是因为dns的问题导致没有权限下载。
总结问题:
- 设备B的dns问题该如何解决,有何思路。
- 如何设置可以使得设备B通过设备C代理就像设备C自己在访问一样,是否有其他方法更为直接?
希望各位不吝指教,谢谢!
明明设置的域名直接,但却走代理的情况我也遇到过,当时也没仔细研究,简单粗爆将相应的域名IP直址加入直接,好像解决了。 DNS是你xray设置的问题,xray里没有配置DNS入口、路由和出口,但53端口又转到xray里了。。。