fakeip + openwrt开 tun2socks 透明代理 防止环路 + 防止透明代理服务器 INPUT 入站流量 #1907
Unanswered
heygo1345678
asked this question in
Q&A
Replies: 1 comment
-
太需要这种方案了,我就是开了TPROXY后,外网访问不了本地服务。有个问题,tun只路由fake-ip-range的流量: 198.10.0.0/16,是不是TG流量就代理不了。 |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
写在前面:
为什么要写这个?
回应高海佬的请求,我就把我的小作文展示出来给大家做个参考;
由于手搓透明代理需要一定的基础性,如果是新手,折腾这个会踩很多坑,我自己折腾手搓透明代理redirect,tproxy, tun2sock ,加一起小作文快接近二十万字了,期间会增加很多知识链。但是小白并不容易获取这些知识链,而tun方式透明代理 给了小白傻瓜式开启透明代理的方式,这里要感谢 世界佬 @nekohasekai 给 sing-box,clash-meta,xray带来这么好的东西,xray可能是即将支持tun,
因此本文是以 clash.meta作为教程示例,后续如果xray正式支持了,理论上也是可以这样套用的,如果可以,后面补充xray的教程
废话就这么多,开始我的小作文吧!
1,傻瓜式开启clash.meta的透明代理:
首先贴配置文件:
mixed-port: 7890 # HTTP(S) 和 SOCKS 代理混合端口
allow-lan: true
bind-address: "" # 绑定 IP 地址,仅作用于 allow-lan 为 true,''表示所有地址
find-process-mode: off
mode: rule
geodata-mode: true #【Meta专属】使用geoip.dat数据库(默认:false使用mmdb数据库)
tcp-concurrent: true #【Meta专属】TCP连接并发,如果域名解析结果对应多个IP,
# 并发所有IP,选择握手最快的IP进行连接
log-level: info
ipv6: true # 开启 IPv6 总开关,关闭阻断所有 IPv6 链接和屏蔽 DNS 请求 AAAA 记录
sniffer:
enable: true
force-dns-mapping: true
override-destination: true
sniff: # TLS 默认如果不配置 ports 默认嗅探 443
TLS:
ports: [443, 8443]
force-domain:
- +.v2ex.com
dns:
enable: true
listen: 0.0.0.0:53
ipv6: true
enhanced-mode: redir-host
nameserver-policy:
"geosite:cn": https://223.5.5.5/dns-query
"geosite:gfw": '8.8.8.8#PROXY' #geosite:gfw域名走8.8.8.8解析,并且8.8.8.8走PROXY代理连接到vps
nameserver:
- https://1.1.1.1/dns-query
proxy-server-nameserver:
- https://223.5.5.5/dns-query
profile:
store-selected: true
external-controller: 192.168.1.1:9090 #外部控制器,可以使用 RESTful API 来控制你的 clash 内核
secret: "clash" #API 的访问密钥
external-ui: Yacd-meta-gh-pages
proxies:
name: "Vision-REALITY"
type: vless
server: "2600" #ipv6: true 才可以使用ipv6地址访问
port: 443
uuid:
network: tcp
tls: true
udp: true
flow: xtls-rprx-vision-udp443
servername: www.microsoft.com
reality-opts:
public-key:
short-id: ""
client-fingerprint: chrome
name: "Vmess-WS-TLS"
type: vmess
server:
port: 443
uuid: 3f1b
alterId: 0
cipher: auto
udp: true
network: ws
tls: true
ws-opts:
path: /ray
name: "vless-reality-grpc"
type: vless
server: "2600:83"
port: 443
uuid: adfb8e
network: grpc
tls: true
udp: true
flow:
client-fingerprint: chrome
servername: www.microsoft.com
grpc-opts:
grpc-service-name: "grpc"
reality-opts:
public-key:
short-id:
proxy-groups:
type: select
proxies:
rules:
GEOSITE,gfw,PROXY
GEOIP,telegram,PROXY
DOMAIN,google.com,PROXY
DOMAIN-KEYWORD,google,PROXY
DOMAIN-SUFFIX,nginx.org,PROXY
DOMAIN-SUFFIX,dnsleaktest.com,PROXY
DOMAIN-SUFFIX,ipleak.net,PROXY
MATCH,DIRECT #兜底规则
启动命令如下:
iptables -I FORWARD -i Meta -j ACCEPT
iptables -I INPUT -i Meta -j ACCEPT
iptables -I FORWARD -o Meta -j ACCEPT
ip6tables -I FORWARD -i Meta -j ACCEPT
ip6tables -I INPUT -i Meta -j ACCEPT
ip6tables -I FORWARD -o Meta -j ACCEPT
/etc/xray/clash.meta-linux-amd64-compatible -d /etc/xray
然后去http://192.168.1.1:9090/ui/面板找到tun开关,一键开启tun就可以透明代理上网了
2.fakeip + openwrt开 tun2socks 透明代理 防止环路 + 防止透明代理服务器 INPUT 入站流量
上面的教程是不是感觉很简单,tun透明代理这么简单就实现了,但是如果你的openwrt有架设一些服务器,
那么会失联,外面连不上的,我目前了解的是 服务器上面玩 tun有危险性, 也就是容易失联,需要折腾 策略路由,cgroup, fwmark...
既然都手搓配置文件+透明代理了,那么多数人是有架设服务器的需求的,那么tun透明代理就和这个冲突了
而本文是使用了懒人方式,用了 fakeip这种诡异方式,
配置文件修改如下:
mixed-port: 7890 # HTTP(S) 和 SOCKS 代理混合端口
allow-lan: true
bind-address: "" # 绑定 IP 地址,仅作用于 allow-lan 为 true,''表示所有地址
find-process-mode: off
mode: rule
geodata-mode: true #【Meta专属】使用geoip.dat数据库(默认:false使用mmdb数据库)
tcp-concurrent: true #【Meta专属】TCP连接并发,如果域名解析结果对应多个IP,
# 并发所有IP,选择握手最快的IP进行连接
log-level: info
ipv6: true # 开启 IPv6 总开关,关闭阻断所有 IPv6 链接和屏蔽 DNS 请求 AAAA 记录
sniffer:
enable: true
force-dns-mapping: true
override-destination: true
sniff: # TLS 默认如果不配置 ports 默认嗅探 443
TLS:
ports: [443, 8443]
force-domain:
- +.v2ex.com
dns:
enable: true
ipv6: true
prefer-h3: false
listen: 0.0.0.0:53
enhanced-mode: fake-ip
fake-ip-range: 198.10.0.1/16
nameserver-policy:
"geosite:cn": https://223.5.5.5/dns-query
"geosite:gfw": '8.8.8.8#PROXY' #geosite:gfw域名走8.8.8.8解析,并且8.8.8.8走PROXY代理连接到vps
nameserver:
- https://1.1.1.1/dns-query
proxy-server-nameserver:
- https://223.5.5.5/dns-query
profile:
store-selected: true
store-fake-ip: true
hosts:
'connectivitycheck.gstatic.com': 203.208.50.98
tun:
enable: true
stack: system # gvisor / lwip
dns-hijack:
- 0.0.0.0:53 # 需要劫持的 DNS
inet4_route_address: # 启用 auto_route 时使用自定义路由而不是默认路由
- 198.10.0.0/16
inet6_route_address: # 启用 auto_route 时使用自定义路由而不是默认路由
- "fdfe:dcba:9876::/126"
external-controller: 192.168.1.1:9090 #外部控制器,可以使用 RESTful API 来控制你的 clash 内核
secret: "clash" #API 的访问密钥
external-ui: Yacd-meta-gh-pages
proxies:
name: "Vision-REALITY"
type: vless
server: "2600:" #ipv6: true 才可以使用ipv6地址访问
port: 443
uuid:
network: tcp
tls: true
udp: true
flow: xtls-rprx-vision-udp443
servername: www.microsoft.com
reality-opts:
public-key:
short-id: ""
client-fingerprint: chrome
name: "Vmess-WS-TLS"
type: vmess
server:
port: 443
uuid:
alterId: 0
cipher: auto
udp: true
network: ws
tls: true
ws-opts:
path: /ray
name: "vless-reality-grpc"
type: vless
server: "2600:"
port: 443
uuid:
network: grpc
tls: true
udp: true
flow:
client-fingerprint: chrome
servername: www.microsoft.com
grpc-opts:
grpc-service-name: "grpc"
reality-opts:
public-key:
short-id:
proxy-groups:
type: select
proxies:
rules:
GEOSITE,gfw,PROXY
GEOIP,telegram,PROXY
DOMAIN-SUFFIX,google.com,PROXY
DOMAIN,google.com,PROXY
DOMAIN-KEYWORD,google,PROXY
DOMAIN-SUFFIX,nginx.org,PROXY
DOMAIN-SUFFIX,dnsleaktest.com,PROXY
DOMAIN-SUFFIX,ipleak.net,PROXY
MATCH,DIRECT #兜底规则
启动命令和上面的保持一致即可。
关于配置文件解读:
(注意clash配置文件修改五个地方:
第一 dns采用fakeip fakedns模式:fake-ip-range: 198.10.0.1/16
第二, tun2socks 透明代理启用,只不过不是自动路由所有网段流量,而是只路由fake-ip-range的流量: 198.10.0.0/16
inet4_route_address: # 启用 auto_route 时使用自定义路由而不是默认路由
- 198.10.0.0/16
ipv6部分也需要设置只路由tun网卡的ipv6网段,否则ipv6 服务器入站流量也被透明代理了, 服务器就无法被访问:
inet6_route_address: # 启用 auto_route 时使用自定义路由而不是默认路由
- "fdfe:dcba:9876::/126"
第三,本来fakeip就是为了防止dns泄漏的, 结果 dns泄漏 了,https://ipleak.net/ 测试有泄漏
查看 clash日志,发现网站有最终找meta默认的(meta源代码里面有)
NameServer: []string{
"https://doh.pub/dns-query",
"tls://223.5.5.5:853",
发送dns请求,而这两个都是国内dns,导致被墙网站dns泄漏,
于是我把
nameserver:
- https://1.1.1.1/dns-query
这样无论国内还是国外都最终走了cf的doh查询,这样有缺点,可能国内网站的dns不是最近cdn的
所以最终这个fakedns+ tun透明代理还是需要和 redir-host 模式一样需要使用nameserver-policy+nameserver避免dns泄漏:
nameserver-policy:
"geosite:cn": https://223.5.5.5/dns-query
"geosite:gfw": '8.8.8.8#PROXY' #geosite:gfw域名走8.8.8.8解析,并且8.8.8.8走PROXY代理连接到vps
nameserver:
- https://1.1.1.1/dns-query
看yacd-meta的连接里面发现国内双栈网站走了ipv6,
被墙双栈网站也走了ipv6了,检查服务器端访问日志全部是域名访问。
https://ipleak.net/ 测试也没有泄漏
第四, sniffer
看yacd-meta的连接里面sniffer没有嗅探得到任何域名,理论上这个部分可以直接删除,不过这个可以在dns泄漏+污染情况下正常访问被墙网站
第五, 谷歌 原生安卓 Android WiFi 显示没有互联网连接,需要把connectivitycheck.gstatic.com加入host列表和直连列表:
hosts:
'connectivitycheck.gstatic.com': 203.208.50.98
第六,为什么我使用了gfwlist 黑名单模式, 我用的是aws的, 怕某个程序不老实,一晚上aws让我房子没了
你可以选择绕过大陆模式:
rules:
第七,本人实际上并不喜欢fakeip模式,之前dns分流一直使用的是正经的dns查询方式,只是为了图方便。
第八,上面我是直接让clash接管了dns 53,因此我关闭了dnsmasq:
关闭dnsmasq
openwrt路由器-DHCP/DNS-高级设置-DNS 服务器端口修改为高位端口53333(差不多等于关闭了dnsmasq服务器)
如果你关闭了dnsmasq,导致dhcp不能分配IP地址了,
可以添加:dhcp-option=6,192.168.1.1到dnsmasq
或者就搞dns劫持
第九,我也是小白,我发到GitHub的discuss区,老是格式化我的纯文本,很烦人呀,我github也就提issue的时候用用,不会搞这个。怎么不改变我的文本格式呢,我就粘贴个纯文本,结果展示出来的就面目全非,还请高海佬帮忙组织下,先谢谢了。
Beta Was this translation helpful? Give feedback.
All reactions