没啊办法,翻墙翻墙还是翻墙。
上游有若干 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 目录下
wget https://github.com/Dreamacro/clash/releases/download/v1.7.1/clash-linux-amd64-v1.7.1.gz
gzip -d clash-linux-amd64-v1.7.1.gz
chmod 755 clash-linux-amd64-v1.7.1
mv clash-linux-amd64-v1.7.1 /usr/local/bin
然后生成 clash.service
cat << EOF >> /etc/systemd/system/clash.service
[Unit]
Description=clash service
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/clash-linux-amd64-v1.7.1
Restart=on-failure # or always, on-abort, etc
[Install]
WantedBy=multi-user.target
EOF
然后最重要的,就是配置文件了
我这里这个旁路由的设备 IP 地址是 192.168.2.2,网卡设备是 enp2s0
下卖弄
# http的代理端口
port: 7890
#mixed-port: 7890
socks-port: 7891
redir-port: 7892
tproxy-port: 7893
ipv6: false
allow-lan: true
bind-address: '192.168.2.2'
interface-name: enp2s0
mode: rule
log-level: info
external-controller: 0.0.0.0:9090
secret: "Fuck2021"
external-ui: dashboard
profile:
store-selected: false
tracing: true
hosts:
# 把cantv的域名解析屏蔽掉,禁止它自动升级
'tms.can.cibntv.net': 0.0.0.0
dns:
enable: true
listen: 0.0.0.0:1053
enhanced-mode: redir-host # or fake-ip
nameserver:
- '114.114.114.114'
- '223.5.5.5'
fallback:
- 208.67.220.220:5353
- 208.67.222.222:5353
- 101.6.6.6:5353
proxies:
- name: "trojan1"
type: trojan
server: www.linuxboy.net
port: 443
password: Fuck2021
sni: www.linuxboy.net
skip-cert-verify: true
- name: "vmess1"
type: vmess
server: 101.59.201.93
port: 41555
uuid: 7a17ae5e-fb86-42e2-abd4-b8c33cfabcd
alterId: 64
cipher: auto
proxy-groups:
- name: Proxy
type: select
proxies:
- trojan
- name: "auto"
type: url-test
proxies:
- vmess1
- trojan1
url: 'http://www.gstatic.com/generate_204'
interval: 300
rules:
- DOMAIN-SUFFIX,v2ex.com,Proxy
- DOMAIN-SUFFIX,t66y.com,Proxy
- DOMAIN-SUFFIX,ycombinator.com,Proxy
- DOMAIN-SUFFIX,reddit.com,Proxy
- DOMAIN-KEYWORD,amazon,Proxy
- DOMAIN-KEYWORD,google,Proxy
- DOMAIN-KEYWORD,gmail,Proxy
- DOMAIN-KEYWORD,youtube,Proxy
- DOMAIN-KEYWORD,facebook,Proxy
- DOMAIN-SUFFIX,fb.me,Proxy
- DOMAIN-SUFFIX,fbcdn.net,Proxy
- DOMAIN-KEYWORD,twitter,Proxy
- DOMAIN-KEYWORD,instagram,Proxy
- DOMAIN-KEYWORD,dropbox,Proxy
- DOMAIN-SUFFIX,twimg.com,Proxy
- DOMAIN-KEYWORD,blogspot,Proxy
- DOMAIN-SUFFIX,youtu.be,Proxy
- DOMAIN-KEYWORD,whatsapp,Proxy
- SRC-IP-CIDR,192.168.1.0/32,DIRECT
- SRC-IP-CIDR,192.168.2.0/32,DIRECT
- IP-CIDR,127.0.0.0/8,DIRECT
- GEOIP,CN,DIRECT
- 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 内容,就可以了
###
#clash
ip rule add fwmark 1 table 100
ip route add local 0.0.0.0/0 dev lo table 100
# CREATE TABLE
iptables -t mangle -N clash
# RETURN LOCAL AND LANS
iptables -t mangle -A clash -d 0.0.0.0/8 -j RETURN
iptables -t mangle -A clash -d 10.0.0.0/8 -j RETURN
iptables -t mangle -A clash -d 100.64.0.0/10 -j RETURN
iptables -t mangle -A clash -d 127.0.0.0/8 -j RETURN
iptables -t mangle -A clash -d 169.254.0.0/16 -j RETURN
iptables -t mangle -A clash -d 172.16.0.0/12 -j RETURN
iptables -t mangle -A clash -d 192.168.0.0/16 -j RETURN
iptables -t mangle -A clash -d 224.0.0.0/4 -j RETURN
iptables -t mangle -A clash -d 240.0.0.0/4 -j RETURN
# whitelist China ip.
# iptables -t mangle -A clash -m set --match-set china dst -j RETURN
# FORWARD ALL
iptables -t mangle -A clash -p udp -j TPROXY --on-port 7893 --tproxy-mark 1
iptables -t mangle -A clash -p tcp -j TPROXY --on-port 7893 --tproxy-mark 1
# REDIRECT
iptables -t mangle -A PREROUTING -j clash
# hijack DNS to Clash
iptables -t nat -N CLASH_DNS
iptables -t nat -F CLASH_DNS
iptables -t nat -A CLASH_DNS -p udp -j REDIRECT --to-port 1053
iptables -t nat -I PREROUTING -p udp --dport 53 -j CLASH_DNS
最后启动clash
systemctl start clash