使用树莓派搭建透明代理、搭建本地DNS服务器及使用cloudflareAPI实现DDNS教程
写在前面
我的网件路由器拿来当AP用了,所以没法使用梅林固件的插件进行魔法上网。手机电脑都还好,但是ns就比较蛋疼了,不挂代理下载慢的跟蜗牛一样,而且不知道为什么国内的一些dns会把ns访问的域名解析到美帝的节点去,所以就想了这么一出。(题目又臭又长请见谅)
准备工作
硬件
- 树莓派4b(别的也行,反正差不多)
- 陈年MacBookAir
- Windows电脑一台(下面我会解释为什么有Mac还要加台Windows的电脑)
- 网线一根
- sd卡一张(大小随意,我用的是闪迪64gb A1的卡)
- 读卡器
- 树莓派对应充电线(4是type-c,之前是microUSB)
软件
~~分享站暂时下线,目前有点小问题 ~~已重新上线
- Ubuntu18.04固件
- balenaEtcher(用于烧录固件)
- ssh工具(这里我使用的是termius。AppStore有)
烧录系统
这一步其实很简单,把上面提到的Ubuntu的固件下载下来,然后在balenaEtcher中就可以一键刷入。
我的Mac不知道为什么这个软件用不了,正好家里有另一台笔记本能用就懒得折腾了。Select image
那选中我们所要烧录的固件–>Select drive
选中我们所要烧录到的sd卡(做这一步的时候建议把别的什么储存卡之类的拔掉,并仔细确认选中的是对的。不要问我为什么)–>点右边的flash等待完成刷入。
树莓派开机及使用
将sd卡插到树莓派上,接上网线,插上供电线即可
等待网口的黄灯闪烁说明已将成功了
这时候我们需要登陆到路由器管理页面查看树莓派的ip(如果是动态ip的话需要将树莓派ip固定下来)
我的树莓派内网IP是192.168.1.149
在ssh工具里填写好IP,同时使用的用户名是ubuntu
,默认密码为ubuntu
。第一次连接后会要求强制更改密码。
在接下去使用的过程中,需要使用root用户,请使用sudo -i
将自己的用户更改为root
首先需要更改源,因为Ubuntu的官方源在国内还是比较慢的(后面还会降到更慢的)
替换源
这里我们需要将文件中的所有源的地址更改为国内源的地址
vim /etc/apt/sources.list #打开文件
按i开启编辑模式,将文件中的所有网址替换为以下任意一种
中科大源
mirrors.ustc.edu.cn #中科大源
############### 你也可以选择先删光文件内容直接复制以下内容 ############
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
阿里云源
mirrors.aliyun.com #阿里云源
############### 你也可以选择先删光文件内容直接复制以下内容 ############
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
163源
mirrors.163.com #163源
############### 你也可以选择先删光文件内容直接复制以下内容 ############
deb http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse
清华源
mirrors.tuna.tsinghua.edu.cn #清华源
############### 你也可以选择先删光文件内容直接复制以下内容 ############
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
结束后按esc
退出编辑模式并输入:wq
保存并退出
修改后更新源
sudo apt-get update
sudo apt-get upgrade
搭建本地DNS服务器
搭建本地DNS服务器使用的是Dnsmasq
安装Dnsmasq
apt-get install dnsmasq
配置Dnsmasq
dnsmasq.conf
打开配置文件
vim /etc/dnsmasq.conf
按i打开编辑模式
去掉strict-order前面的#号
设置listen-address,配置如下:
listen-address=127.0.0.1,逗号后的这里请填写树莓派的内网IP地址
修改缓存大小(就在目前打开的文件中添加以下内容即可)
cache-size=10000
resolv.conf
打开文件
vim /etc/resolv.conf
添加上游dns,格式如下
nameserver 此处填写DNS地址,注意和前面的nameserver之间要有一个空格
查询顺序自上而下,可以多添加几个上游DNS地址
按esc
退出编辑模式
输入:wq
保存并退出
启动
启动
service dnsmasq restart
查看运行状态
service dnsmasq status
没有报错就说明安装成功了
搭建透明代理
这里我们使用的是大名鼎鼎的clash
安装clash
找到armv7
的包,复制链接并使用wget
下载到机器(个人建议用能魔法上网的电脑先下载好之后上传到树莓派上,这里不介绍怎么传了)
mkdir /home/clash
cd /home/clash
wget 此处填入前面找到的安装包的下载链接,比如写这篇文章时的是https://github.com/Dreamacro/clash/releases/download/v0.19.0/clash-linux-armv7-v0.19.0.gz
gunzip clash-linux-armv7-v0.19.0.gz #解压包,记得把文件名替换成你下载的文件的文件名
mv clash-linux-armv7-v0.19.0 /usr/local/bin/clash #将解压好的文件夹移动至/usr/local/bin/clash
chmod +x /usr/local/bin/clash #给权限
配置文件
配置文件怎么来的不解释,这里默认大家已经有配置文件了。
假设我们手上有一个配置文件(文件名为a.yaml
,文件路径为/home/clash/a.yaml
),且目前我们处于/home/clash
这个文件夹中
重命名配置文件
mv a.yaml config.yaml
打开并修改配置文件
vim config.yaml
将文件中的这两个配置修改成如下
allow-lan: true #即允许来自局域网的连接
external-controller: 0.0.0.0:9090 #可以外部控制
保存并退出
启动clash
clash -d /home/clash
无错误输出的就是成功了
守护程序
这里介绍service,也可以选用pm2(推荐)
cd /etc/systemd/system
vim clash.service
在文件中添加如下内容
# This is about to control clash's start|stop|restart|status|enable
[Unit]
Description=Clash Service
After=network.target
[Service]
ExecStart=/usr/local/bin/clash -d /home/clash
Restart=on-abort
LimitNOFILE=1048576
[Install]
WantedBy=multi-user.target
要注意ExecStart=/usr/local/bin/clash -d /home/clash
这行使用的命令,如果按我的教程做的不需要修改,如果配置文件位置不一样的请自行做调整
启动
systemctl start clash
查看运行状态
systemctl status clash
开机自启
systemctl enable clash
小结
这样就完成了clash的设置,局域网内的设备就可以通过配置文件里设置的端口设置代理进行魔法上网了。(默认http是7890,socks是7891,请自行查看配置文件设置的端口)
想要外网访问的话需要路由器支持端口转发,请自行设置。
这里不介绍web管理页面怎么弄了,非常简单,GitHub上把文件下载到电脑点开文件夹里的index.html
文件就能用(管理页面会要求填ip和端口号,ip是树莓派内网ip,端口号是之前在修改配置文件时提到的external-controller: 0.0.0.0:9090
这里的9090)。
使用cloudflareAPI实现DDNS
事情是这样的,本来我想弄完上面两样就收工的,然后想想得折腾折腾让外网也能正常访问。但我家宽带是动态ip我使用的主路由是TP-LINK的企业级路由,虽然支持使用ddns但是只能使用固定那几家的(花生壳啥的),但我不想用。正好我有域名,且是cloudflare托管,就使用cloudflare的api来实现ddns。
这里使用到的脚本来自这位大神的这篇文章(利用 CloudFlare API 实现自动 DDNS 功能|支持IPv4|IPv6),我家是IPv4所以我去掉了IPv6的内容,如需要请前往原文查看IPv6相关设置,这里就不多介绍了。
脚本
#!/bin/bash
auth_email="cloudflare账号邮箱"
auth_key="api秘钥"
zone_name="根域名"
record_name="绑定公网ip的子域名"
record_type="A"
ip=$(curl -s http://members.3322.org/dyndns/getip)
ip_file="ip.txt"
id_file="cloudflare.ids"
log_file="cloudflare.log"
log() {
if [ "$1" ]; then
echo -e "[$(date)] - $1" >> $log_file
fi
}
log "Check Initiated"
if [ -f $ip_file ]; then
old_ip=$(cat $ip_file)
if [ "$ip" == "$old_ip" ]; then
echo "IP has not changed."
exit 0
fi
fi
if [ -f $id_file ] && [ $(wc -l $id_file | cut -d " " -f 1) == 2 ]; then
zone_identifier=$(head -1 $id_file)
record_identifier=$(tail -1 $id_file)
else
zone_identifier=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones?name=$zone_name" -H "X-Auth-Email: $auth_email" -H "X-Auth-Key: $auth_key" -H "Content-Type: application/json" | grep -Po '(?<="id":")[^"]*' | head -1 )
record_identifier=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$zone_identifier/dns_records?name=$record_name&type=$record_type" -H "X-Auth-Email: $auth_email" -H "X-Auth-Key: $auth_key" -H "Content-Type: application/json" | grep -Po '(?<="id":")[^"]*')
echo "$zone_identifier" > $id_file
echo "$record_identifier" >> $id_file
fi
update=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$zone_identifier/dns_records/$record_identifier" -H "X-Auth-Email: $auth_email" -H "X-Auth-Key: $auth_key" -H "Content-Type: application/json" --data "{\"id\":\"$zone_identifier\",\"type\":\"$record_type\",\"name\":\"$record_name\",\"content\":\"$ip\"}")
if [[ $update == *"\"success\":false"* ]]; then
message="API UPDATE FAILED. DUMPING RESULTS:\n$update"
log "$message"
echo -e "$message"
exit 1
else
message="IP changed to: $ip"
echo "$ip" > $ip_file
log "$message"
echo "$message"
fi
使用方法
先确定自家宽带目前的公网ip,并添加到CloudFlare的DNS记录中(不要打开CDN)
并在概述处找到api,获取Global API Key
的秘钥
制作脚本
cd /home
vim cfapi.sh
填入上面提到的脚本,并将上面有中文的四行依次填入中文所示的信息后保存并退出。
执行
chmod +x cfapi.sh
./cfapi.sh
如果下面这个输出了宽带公网ip或显示ip为改变则说明成功了
输出了这个
IP changed to: ****
或者这个
IP has not changed.
就是成功了
定时运行
我家路由器每天四点重启,所以每天四点都会更新IP,我们需要做的就是让脚本定时运行,保证实时更新。
service cron start #启动定时执行工具
crontab -e #编辑配置
第一次执行会显示让你选择使用的编辑工具,填对应数字并回车就行,我选择的是2(vim)
接着的操作和之前使用vim完全一样
这里我们填入以下命令
0 5 * * * /home/cfapi.sh >/dev/null 2>&1
即每天五点运行一次脚本(具体含义可参考这篇文章)
保存并退出
重启程序
service cron restart
完成。
后记
折腾完了我也身心舒畅了,你说折腾这个有啥用其实也真没什么用。但也算是学到了不少新的知识吧。
写这篇文章花了我两个小时,从晚上八点半写到晚上十点半,真的累。创作不易,欢迎大家支持和资瓷。