没啊办法,翻墙翻墙还是翻墙。
上游有若干 trojian 、v2ray 、sock5 、http各种各样的代理,这样多种的选择,那么就装一个 clash 客户端就可以全接管了。
说下我们的做法:找个小Linux做旁路由,DNS和网关都设置在这台机器上,局域网内的机器都通过这台上网。
我们用到的是 clash 的 Tproxy redir-host 和 udp-proxy 模式,这种模式比较强大。用就用最强大的。
安装很简单,操作系统 centos 或者 ubuntu 都行,项目地址:
https://github.com/Dreamacro/clash
说明书:
https://lancellc.gitbook.io/clash/clash-config-file/proxy-groups/load-balance
首先下载二进制文件,现在版本是 v1.7.1,解压后放到 /usr/local/bin 目录下
1wget https://github.com/Dreamacro/clash/releases/download/v1.7.1/clash-linux-amd64-v1.7.1.gz
2gzip -d clash-linux-amd64-v1.7.1.gz
3chmod 755 clash-linux-amd64-v1.7.1
4mv clash-linux-amd64-v1.7.1 /usr/local/bin
然后生成 clash.service
1cat << EOF >> /etc/systemd/system/clash.service
2[Unit]
3Description=clash service
4After=network.target
5
6[Service]
7Type=simple
8User=root
9ExecStart=/usr/local/bin/clash-linux-amd64-v1.7.1
10Restart=on-failure # or always, on-abort, etc
11
12[Install]
13WantedBy=multi-user.target
14EOF
然后最重要的,就是配置文件了
我这里这个旁路由的设备 IP 地址是 192.168.2.2,网卡设备是 enp2s0
下卖弄
1# http的代理端口
2port: 7890
3#mixed-port: 7890
4socks-port: 7891
5redir-port: 7892
6tproxy-port: 7893
7
8ipv6: false
9
10allow-lan: true
11bind-address: '192.168.2.2'
12interface-name: enp2s0
13
14mode: rule
15log-level: info
16external-controller: 0.0.0.0:9090
17secret: "Fuck2021"
18external-ui: dashboard
19
20profile:
21 store-selected: false
22 tracing: true
23
24
25hosts:
26 # 把cantv的域名解析屏蔽掉,禁止它自动升级
27 'tms.can.cibntv.net': 0.0.0.0
28
29dns:
30 enable: true
31 listen: 0.0.0.0:1053
32 enhanced-mode: redir-host # or fake-ip
33 nameserver:
34 - '114.114.114.114'
35 - '223.5.5.5'
36 fallback:
37 - 208.67.220.220:5353
38 - 208.67.222.222:5353
39 - 101.6.6.6:5353
40
41proxies:
42 - name: "trojan1"
43 type: trojan
44 server: www.linuxboy.net
45 port: 443
46 password: Fuck2021
47 sni: www.linuxboy.net
48 skip-cert-verify: true
49
50 - name: "vmess1"
51 type: vmess
52 server: 101.59.201.93
53 port: 41555
54 uuid: 7a17ae5e-fb86-42e2-abd4-b8c33cfabcd
55 alterId: 64
56 cipher: auto
57
58proxy-groups:
59 - name: Proxy
60 type: select
61 proxies:
62 - trojan
63
64 - name: "auto"
65 type: url-test
66 proxies:
67 - vmess1
68 - trojan1
69 url: 'http://www.gstatic.com/generate_204'
70 interval: 300
71
72rules:
73 - DOMAIN-SUFFIX,v2ex.com,Proxy
74 - DOMAIN-SUFFIX,t66y.com,Proxy
75 - DOMAIN-SUFFIX,ycombinator.com,Proxy
76 - DOMAIN-SUFFIX,reddit.com,Proxy
77 - DOMAIN-KEYWORD,amazon,Proxy
78 - DOMAIN-KEYWORD,google,Proxy
79 - DOMAIN-KEYWORD,gmail,Proxy
80 - DOMAIN-KEYWORD,youtube,Proxy
81 - DOMAIN-KEYWORD,facebook,Proxy
82 - DOMAIN-SUFFIX,fb.me,Proxy
83 - DOMAIN-SUFFIX,fbcdn.net,Proxy
84 - DOMAIN-KEYWORD,twitter,Proxy
85 - DOMAIN-KEYWORD,instagram,Proxy
86 - DOMAIN-KEYWORD,dropbox,Proxy
87 - DOMAIN-SUFFIX,twimg.com,Proxy
88 - DOMAIN-KEYWORD,blogspot,Proxy
89 - DOMAIN-SUFFIX,youtu.be,Proxy
90 - DOMAIN-KEYWORD,whatsapp,Proxy
91 - SRC-IP-CIDR,192.168.1.0/32,DIRECT
92 - SRC-IP-CIDR,192.168.2.0/32,DIRECT
93 - IP-CIDR,127.0.0.0/8,DIRECT
94 - GEOIP,CN,DIRECT
95 - MATCH,Proxy
解释一下:proxy 定义了两个代理,一个是 trojan,一个是 v2ray。然后再集合成组,一个组叫 Proxy, 显式指定用 trojan;另一个组叫 auto,根据 vmess1 和 trojan1 访问 http://www.gstatic.com/generate_204 的页面速度,谁快就用谁,缺省300秒会访问一次这个页面来决定哪个代理快。
剩下的 rules 就很简单,把自己知道要访问的域名放到代理中去,然后把局域网的 IP 段放进 DIRECT 直接访问,最后 GEO IP 不是中国的由 Proxy 兜底。
网上有一大堆规则,八戒的建议是不要去学,规则越多越慢,你自己知道要访问什么网站需要翻墙,加进去就好了。弄一堆,自己看着都头蒙
最后我们在 rc.local 放入以下 iptable 内容,就可以了
1###
2#clash
3ip rule add fwmark 1 table 100
4ip route add local 0.0.0.0/0 dev lo table 100
5
6# CREATE TABLE
7iptables -t mangle -N clash
8
9# RETURN LOCAL AND LANS
10iptables -t mangle -A clash -d 0.0.0.0/8 -j RETURN
11iptables -t mangle -A clash -d 10.0.0.0/8 -j RETURN
12iptables -t mangle -A clash -d 100.64.0.0/10 -j RETURN
13iptables -t mangle -A clash -d 127.0.0.0/8 -j RETURN
14iptables -t mangle -A clash -d 169.254.0.0/16 -j RETURN
15iptables -t mangle -A clash -d 172.16.0.0/12 -j RETURN
16iptables -t mangle -A clash -d 192.168.0.0/16 -j RETURN
17iptables -t mangle -A clash -d 224.0.0.0/4 -j RETURN
18iptables -t mangle -A clash -d 240.0.0.0/4 -j RETURN
19
20# whitelist China ip.
21# iptables -t mangle -A clash -m set --match-set china dst -j RETURN
22
23# FORWARD ALL
24iptables -t mangle -A clash -p udp -j TPROXY --on-port 7893 --tproxy-mark 1
25iptables -t mangle -A clash -p tcp -j TPROXY --on-port 7893 --tproxy-mark 1
26
27# REDIRECT
28iptables -t mangle -A PREROUTING -j clash
29
30# hijack DNS to Clash
31iptables -t nat -N CLASH_DNS
32iptables -t nat -F CLASH_DNS
33iptables -t nat -A CLASH_DNS -p udp -j REDIRECT --to-port 1053
34iptables -t nat -I PREROUTING -p udp --dport 53 -j CLASH_DNS
最后启动clash
1systemctl start clash