树莓派安装frp实现内网穿透

前言

目前这套博客是搭建在一台树莓派2B上,并且已经稳定运行了好几个月,具体搭建过程在之前的文章树莓派上搭建Typecho小记中都有说明。但搭建在家庭内网的树莓派怎么被外网顺利访问?这个问题的答案就是内网穿透,目前主流的内网穿透方案有很多,物理硬件有:花生棒、公网IP盒子等,开源软件有:Zerotier、n2n、ngrok、Lanproxy以及我选用的frp。

服务端搭建-frps

内网穿透肯定是需要一个固定外网可访问的IP,一般需要租用一台服务器或者VPS,国内服务器一般需要备案,我选用的是搬瓦工VPS,一年10美元,还附赠一个固定IP,可以说非常实惠了。

服务端搭建目前已经整理成一键安装脚本,具体搭建过程如下:
1.安装前查看占用80端口的进程,第二列即为进程号,如果有占用,则kill进程号

# 查看
lsof -i :80|grep -v "PID"
# 杀进程
kill -9 PID

2.安装

wget --no-check-certificate https://raw.githubusercontent.com/bravecheng/ShellScriptList/master/frps/frps.sh -O ./frps.sh
chmod +x ./frps.sh
./frps.sh install

服务端配置文件具体如何配置不再赘述,可以看->官方说明

客户端搭建-frpc

frp是使用go语言开发的,内存占用非常低,而且具有很好的跨平台型,可以在树莓派上完美运行,过了这么久才来写,也是因为确认真的没问题了(* ̄︶ ̄)

运行客户端只需要2个文件,frpc 和 frpc.ini. 这两个文件可以在发布页找到,我们以 frp_0.21.0_linux_arm.tar.gz 为例.

# 获取文件
wget https://github.com/fatedier/frp/releases/download/v0.21.0/frp_0.21.0_linux_arm.tar.gz
# 解压.
tar -zxvf frp_0.21.0_linux_arm.tar.gz

解压后到解压后的文件目录里,可以看到:frpc frps frpc.ini frps.ini 这4个文件,这4个文件只有2个是我们需要的,我们只拷贝这两个就可以了。

# 移动frpc到/usr/local/bin/
mv ./frpc /usr/local/bin/frpc
# 移动frpc.ini到/etc/frpc/
mv ./frpc.ini /etc/frpc/frpc.ini

同样的客户端端配置文件具体如何配置也不再赘述,去看->官方说明

Systemd

大部分 Linux 系统中都内置了Systemd,如果没有可以手动安装Systemd这样我们就能保证在掉电重启后也能正常访问。

安装Systemd

apt-get update
apt-get install systemd
apt-get install systemd-sysv

grub配置

sudo nano /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash init=/lib/systemd/systemd"

特别注意

在下一个步骤前,我提前说下我遇到的一个问题,加入Systemd的service在我重启树莓派后并没有成功启动,于是开始排查问题,在这个回答中找到了答案,处理方式如下:

1.在frpc.ini [common]配置下,添加

login_fail_exit = false

添加的目的是为了自启动登录失败后不退出,继续重试;

2.frp能正常运行需要2个条件:能联网+服务器和客户端时间正确,所以我们需要树莓派在掉电重启后能自动对时,需要添加napdate.service:

sudo nano /usr/lib/systemd/system/napdate.service

内容如下:

[Unit]
Description=ntpdate
After=network.target

[Service]
Type=simple
User=root
PIDFile=/var/run/ntpdate.pid
ExecStart=/usr/sbin/ntpdate time.windows.com
Restart=on-failure
RestartSec=15s

[Install]
WantedBy=multi-user.target

配置完成后,保存,启用。

systemctl enable napdate.service
systemctl start napdate.service
systemctl status napdate.service

frpc开机自启动

使用Systemd来实现frpc的开机自启动,需要创建frpc.service:

sudo nano /usr/lib/systemd/system/frpc.service

内容如下:

# frpc.service
[Unit]
Description=frpc
After=network.target ntpdate.service

[Service]
Type=simple
User=root
PIDFile=/var/run/frpc.pid
ExecStart=/usr/local/bin/frpc -c /etc/frpc/frpc.ini
Restart=on-failure
RestartSec=15s

[Install]
WantedBy=multi-user.target

简单说明下,After=network.target ntpdate.service 表示该服务在网络加载以及对时服务执行完成才执行,这样保证了frpc的正常执行。配置完成后,保存,启用。

systemctl enable frpc.service
systemctl start frpc.service
systemctl status frpc.service

如果出现启动无效的情况,可以尝试先停止

systemctl stop frpc.service

结束

安装结束后,把树莓派断电试试,如果断电重新上电后一切正常,说明已经配置成功,我这边配置结束后,除了特别注意的那点问题,其余的一切正常。

标签:树莓派, frp, 内网穿透