这篇文章来自我去年暑假的obsidian笔记
(其实当时并没有搭halo..

记录一次树莓派内网穿透,搭建[二次元发卡网],搭建1panel,搭建Halo博客

树莓派型号 3b+

穿透工具 starryfrp.com (签到送流量,要实名制)

开启SSH

树莓派桌面 -> Preference -> PI Configuration -> enable什么什么,然后有ssh可以选

安装1Panel

已经连接到树莓派,安装1panel
注意,官网的一键脚本没root权限。要自己加sudo

端口

由于经济水平限制,只好搞内网穿透的。
不想备案,太麻烦

我的配置原则:

  • ssh,mysql,openresty这些服务的本地端口和远程端口不一致,本地端口为默认 (因为有些程序可能不支持换端口,比如有个spigot插件就是,只能用mysql 3306。虽然说可以进行本地端口转发,麻烦死了不是?)
  • 1panel,mod整合包静态对象储存,这些服务保持端口一致,按照自己习惯来

FRPC

从 starryfrp.com 下载来frpc,解压到 /usr/local/bin/
记得给权限 chmod +x

FRPC自动启动

systemd 做自启动
先移动文件 sudo mv frpc.service /etc/systemd/system/.
重载一下systemd systemctl daemon-reload

frpc.service:

[Unit]
Description=FRP Client Daemon
After=network.target
Wants=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/frpc -c /usr/local/bin/frpc.ini
Restart=always
RestartSec=20s
User=nobody

[Install]
WantedBy=multi-user.target

安装服务就是:

[Unit]
Description=FRP Server Daemon
After=network.target
Wants=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/frps/frps -c /usr/local/bin/frps/frps.ini
Restart=always
RestartSec=20s
User=nobody

[Install]
WantedBy=multi-user.target

开启: sudo systemctl enable frpc
查看状态: sudo systemctl status frpc

frp启用Proxy Protocol 功能

找到frpc配置文件,只需要在代理配置中增加一行 proxy_protocol_version = v2即可开启此功能。
这里以 https 类型为例:

[web]
type = https
local_port = 443
custom_domains = test.yourdomain.com

目前支持 v1 和 v2 两个版本的 proxy protocol 协议
proxy_protocol_version = v2

配置nginx

在listen段添加 proxy_protocol,然后配置 real IP header 为 proxy_protocol,例如:

server {
	listen 80 proxy_protocol;
	listen 443 ssl http2 proxy_protocol;
	real_ip_header proxy_protocol;
	real_ip_recursive on;
	set_real_ip_from 192.168.2.1;
}

其中set_real_ip_from 的参数为frp客服端的内网IP。
保存 Nginx 配置后,重启 Nginx,就可以获取用户真实 IP了。
重启 Nginx命令:service nginx restart

#树莓派 #内网穿透 #frp #1panel

[Unit]
Description=Wake On Lan Service
After=network.target
Wants=network.target

[Service]
Type=simple
ExecStart=/usr/bin/python3 /usr/local/bin/wol/wol.py
Restart=always
RestartSec=20s
User=nobody

[Install]
WantedBy=multi-user.target