if [ "$en_mode" == "fake-ip" ]; then
LOG_OUT "limit route to only fake ips with proxy port $proxy_port"
/etc/mosdns/rule/geoip2ipset.sh /etc/openclash/GeoIP.dat telegram
if [ -n "$FW4" ]; then
handle=$(nft -a list chain inet fw4 openclash | grep 'ip protocol tcp counter' | awk '{print $NF}')
LOG_OUT "deleting nft rule handle $handle"
nft delete rule inet fw4 openclash handle $handle
nft add rule inet fw4 openclash ip protocol tcp ip daddr @telegram counter redirect to $proxy_port
iptables -t nat -D openclash -p tcp -j REDIRECT --to-ports $proxy_port
iptables -t nat -A openclash -m set --match-set telegram dst -p tcp -j REDIRECT --to-ports $proxy_port
LOG_OUT "restart adguardhome"
/etc/init.d/AdGuardHome restart
其中
/etc/mosdns/rule/geoip2ipset.sh
这个脚本可以根据 GeoIP 数据库来生成对应的 ipset。内容如下,这个文件放到路由器上后,记得要执行
chmod a+x /etc/mosdns/rule/geoip2ipset.sh
给它赋予可执行权限。
#!/bin/bash
geoipfile="$1"
tag="$2"
tmpdir="/tmp/v2dat"
FW4=$(command -v fw4)
cd $(cd $(dirname $BASH_SOURCE) && pwd)
mkdir -p "$tmpdir"
filename=$(basename -- "$geoipfile")
filename="${filename%.*}"
filename="$tmpdir/${filename}_$tag.txt"
if [ "$tag" == "telegram" ]; then
wget -4 --timeout 5 -O "$filename" 'https://core.telegram.org/resources/cidr.txt'
if [ "$?" != "0" ]; then
/usr/bin/v2dat unpack geoip -o "$tmpdir" -f "$tag" "$geoipfile"
/usr/bin/v2dat unpack geoip -o "$tmpdir" -f "$tag" "$geoipfile"
if test -f "$filename"; then
if [ -n "$FW4" ]; then
nft add set inet fw4 "$tag" { type ipv4_addr\; flags interval\; auto-merge\; }
nft add set inet fw4 "${tag}6" { type ipv6_addr\; flags interval\; auto-merge\; }
nft flush set inet fw4 "$tag"
nft flush set inet fw4 "${tag}6"
ipset create "$tag" hash:net -!
ipset create "${tag}6" hash:net family inet6 -!
ipset flush "$tag"
ipset flush "${tag}6"
while read p; do
if ! grep -q ":" <<< "$p"; then
if [ -n "$FW4" ]; then
nft add element inet fw4 "$tag" { "$p" }
ipset add "$tag" "$p"
if [ -n "$FW4" ]; then
nft add element inet fw4 "${tag}6" { "$p" }
ipset add "${tag}6" "$p"
done <"$filename"
echo "$filename missing."
rm -rf "$tmpdir"
mosdns
选自定义配置文件,取消
DNS 转发
的勾,然后我就直接贴配置了,注意 Clash DNS 端口要改成你自己在 OpenClash 里的配置,LAN IP-CIDR 也要改成你自己的内网配置,这里 mosdns 监听了 5335 端口。并且要在
GeoData 数据导出
里配置上我们用到的标签:
GeoSite: cn, apple-cn, category-games@cn, geolocation-!cn
,
GeoIP: cn
level: info
file: "/tmp/mosdns.log"
include: []
plugins:
# 国内域名
- tag: geosite_cn
type: domain_set
args:
exps:
- "lan"
- "local"
- "arpa"
files:
- "/etc/mosdns/rule/whitelist.txt"
- "/var/mosdns/geosite_cn.txt"
- "/var/mosdns/geosite_apple-cn.txt"
- "/var/mosdns/
[email protected]"
# 国内 IP
- tag: geoip_cn
type: ip_set
args:
files:
- "/var/mosdns/geoip_cn.txt"
# 国外域名
- tag: geosite_no_cn
type: domain_set
args:
files:
- "/etc/mosdns/rule/greylist.txt"
- "/var/mosdns/geosite_geolocation-!cn.txt"
# hosts
- tag: hosts
type: hosts
args:
files:
- "/etc/mosdns/rule/hosts.txt"
# 国内解析
- tag: local_sequence
type: sequence
args:
- exec: forward 127.0.0.1
- matches:
- has_resp
- resp_ip 192.168.1.0/24 # LAN IPCIDR
exec: ttl 1800-0
# 国外解析
- tag: remote_sequence
type: sequence
args:
- matches:
- qtype 28
exec: reject 0
- exec: forward 127.127.127.127:7874
- exec: ttl 1800-0
# 有响应终止返回
- tag: has_resp_sequence
type: sequence
args:
- matches: has_resp
exec: accept
# fallback 用本地服务器 sequence
# 返回非国内 ip 则 drop_resp
- tag: fallback_local
type: sequence
args:
- exec: $local_sequence
- matches: "!resp_ip $geoip_cn"
exec: drop_resp
# fallback 用远程服务器 sequence
- tag: fallback
type: fallback
args:
primary: fallback_local
secondary: remote_sequence
threshold: 200
always_standby: true
# 主要的运行逻辑插件
# sequence 插件中调用的插件 tag 必须在 sequence 前定义,
# 否则 sequence 找不到对应插件。
- tag: main_sequence
type: sequence
args:
# hosts
- exec: $hosts
- exec: jump has_resp_sequence
# drop https query type
- matches:
- qtype 65
exec: reject 3
# handle local ptr
- matches:
- qtype 12
exec: $local_sequence
- exec: jump has_resp_sequence
- matches:
- qname $geosite_cn
exec: $local_sequence
- exec: jump has_resp_sequence
- matches:
- qname $geosite_no_cn
exec: $remote_sequence
- exec: jump has_resp_sequence
- exec: $fallback
- tag: udp_server
type: udp_server
args:
entry: main_sequence
listen: ":5335"
AdGuardHome
在 luci 页面上,开启端口重定向,选择
重定向53端口到AdGuardHome
,这里注意 AdGuardHome 本身不要监听 53 端口,把 53 端口留给 dnsmasq,AdGuardHome 设置一个其它的端口就可以了。
在 Web 管理页面上,
设置
–
DNS 设置
中,上游 DNS 服务器内只填写一个 mosdns 的地址
127.0.0.1:5335 #mosdns
,私人反向 DNS 服务器写上
127.0.0.1 #dnsmasq
。DNS 缓存配置里面,缓存大小看你内存大小填写,乐观缓存勾上。
对于不想走代理的设备,可以在
设置
–
客户端设置
中添加,并且把上游 DNS 服务器设置成
127.0.0.1
。
©
版权声明
1、本网站名称:
爱极客
2、本站永久网址:
https://www.iigeek.com
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长QQ55019541进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
THE END
喜欢就支持一下吧
woqu 10个月前
0
tmux不香码?