fakeip + openwrt开 tun2socks 透明代理 防止环路 + 防止透明代理服务器 INPUT 入站流量 #1907
Unanswered
heygo1345678
asked this question in
Q&A
Replies: 4 comments 1 reply
-
太需要这种方案了,我就是开了TPROXY后,外网访问不了本地服务。有个问题,tun只路由fake-ip-range的流量: 198.10.0.0/16,是不是TG流量就代理不了。 |
Beta Was this translation helpful? Give feedback.
0 replies
-
可以这样写,不会被格式化还能容易看懂。 ```yaml 就像这样 find-process-mode: off
mode: rule |
Beta Was this translation helpful? Give feedback.
1 reply
-
既然都openwrt了,passwall之类使用xray就可以实现透明代理呀。套娃mosdns也能防DNS泄漏。fakedns的副作用还是有的,特别是终端网关不是op的时候。 |
Beta Was this translation helpful? Give feedback.
0 replies
-
,xray可能是即将支持tun, 最后支持TUN模式了吗? |
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
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
写在前面:
为什么要写这个?
回应高海佬的请求,我就把我的小作文展示出来给大家做个参考;
由于手搓透明代理需要一定的基础性,如果是新手,折腾这个会踩很多坑,我自己折腾手搓透明代理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