2024-10-23更新:更安全的方式请看浅析Frp的https转发
去年英特尔发布了基于12代酷睿小核的N系列处理器,其中的N100、N305被奉为nas神U,今年我也搞了一台N100小主机当家庭服务器用,自己插一根16G内存加上一个6盘位硬盘笼这不比云服务器性价比高啊
但是由于当地运营商政策,我把光猫改桥接后没几天就来电话了,导致我连公网v6都没有,所以只好走内网穿透的路子了
一、准备工作
内网穿透自然少不了一台带公网IP的服务器了,由于我所有nas相关的服务只在内网供我自己使用,暴露到公网的只有一些建站需求,所以从省钱的角度考虑我需要一台低延迟、低带宽的服务器,当然CPU内存硬盘什么的也尽可能低,网穿+反代+小水管带宽根本废不了多少性能。
以上介绍了适合我的情况,小伙伴们要根据适合自己的情况选服务器哦
根据不同的内存,我会分别推荐以下几种搭建方式:
- 内存>=1G:搭建1Panel面板,使用里面的OpenResty和frps应用
- 内存≈512M:宿主机部署frps,安装docker部署nginx proxy manager
- 内存≈256M:宿主机部署frps和nginx,自己手搓配置
二、客户端搭建
客户端(也就是家里的服务器)我们使用frp来进行内网穿透
- frp项目地址:https://github.com/fatedier/frp
下面介绍frp的两种搭建方式:Docker安装和直接部署
1、Docker安装frpc(以Rocky linux为例)
首先输入下面的命令安装docker,已经装好的可以跳过
# 添加Docker Repo
dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
# 更新源
dnf update
# 在安装 Docker CE 的时候,会同步安装 docker-compose-plugin 插件
dnf install -y docker-ce
成功安装后输入docker --version
可以看到输出的版本信息
然后安装docker-compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
如果下载缓慢可以尝试国内的代理
sudo curl -L "https://ghproxy.com/https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
赋予文件运行权限
sudo chmod +x /usr/local/bin/docker-compose
链接docker-compose文件
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
至此就算安装完成了,输入docker-compose --version
会输出版本信息
然后安装frpc
cd到你想安装的路径下,创建docker-compose.yml文件
version: '3.3' #报版本错误就把这行删掉
services:
frpc:
restart: always
network_mode: host
volumes:
- './frpc.toml:/etc/frp/frpc.toml' #配置文件
container_name: frpc #容器名称
image: snowdreamtech/frpc
然后创建frpc.toml文件,输入下面的配置
serverAddr = "x.x.x.x" #你的云服务器ip
serverPort = 7000 #frp服务端口
auth.method = "token" #认证方式
auth.token = "moke0721" #认证密码
webServer.addr = "0.0.0.0"
webServer.port = 7400 #客户端面板端口
webServer.user = "yourId" #客户端面板用户名
webServer.password = "yourPasswd" #客户端面板密码
webServer.pprofEnable = false
完成后输入docker-compose up -d
就会拉取镜像创建容器
完成后浏览器访问你的ip:frp客户端面板端口
进入面板,在Configure处你就能看到刚才编写的配置
在下面添加你需要内网穿透的端口,内容如下
[[proxies]]
name = "RD" #隧道名称
type = "tcp" #传输协议
localIP = "127.0.0.1" #需要穿透的内网ip
localPort = 2333 #需要穿透的内网端口
remotePort = 2333 #外网访问端口
每个端口都要写一份这个配置,完成后点击上方Upload
更新配置
2、直接部署frpc
到项目的releases页面下载适合自己系统的压缩包并解压到安装目录
打开其中的frpc.toml文件修改配置如下
serverAddr = "x.x.x.x" #你的云服务器ip
serverPort = 7000 #frp服务端口
auth.method = "token" #认证方式
auth.token = "fgewsfes" #认证密码
webServer.addr = "0.0.0.0"
webServer.port = 7400 #客户端面板端口
webServer.user = "yourId" #客户端面板用户名
webServer.password = "yourPasswd" #客户端面板密码
webServer.pprofEnable = false
输入./frpc -c ./frpc.toml
尝试运行
此时用内网的其他设备访问你的ip:frp客户端面板端口
,可进入面板说明配置正确
回到客户端停止frpc,下面要将frpc注册为systemd服务,输入下面的命令编写
vim /etc/systemd/system/frps.service
[Unit]
# 服务名称,可自定义
Description = frpc
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /path/to/frpc -c /path/to/frpc.toml
[Install]
WantedBy = multi-user.target
wq保存后即可使用systemd管理frpc
# 启动frp
sudo systemctl start frpc
# 停止frp
sudo systemctl stop frpc
# 重启frp
sudo systemctl restart frpc
# 查看frp状态
sudo systemctl status frpc
完成后浏览器访问你的ip:frp客户端面板端口
进入面板,在Configure处你就能看到刚才编写的配置
在下面添加你需要内网穿透的端口,内容如下
[[proxies]]
name = "RD" #隧道名称
type = "tcp" #传输协议
localIP = "127.0.0.1" #需要穿透的内网ip
localPort = 2333 #需要穿透的内网端口
remotePort = 2333 #外网访问端口
每个端口都要写一份这个配置,完成后点击上方Upload
更新配置
三、服务端搭建
1、1Panel面板+OpenResty、Frps(内存至少1G)
使用ssh登录你的云服务器,输入下面命令安装1Panel面板(以Rocky linux为例)
curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sh quick_start.sh
根据提示完成安装后访问你的ip:端口/安全入口
即可访问面板
在左侧应用商店内安装OpenResty和Frp服务端,记得Frp服务端设置的端口和账号密码,记得勾选外部访问
如果你上面的frpc配置正确,那么登录到后台就能发现刚才建立的隧道
此时输入你的ip:端口
就可以访问到家里的服务器了
如果你还想通过域名访问,请继续往下看
在1Panel面板左侧点击网站
,点击创建网站
,类型选择反向代理
主域名处填写你的域名,代理地址处填写127.0.0.1:隧道公网端口
(这里填docker的虚拟网卡会更好)
然后在你的dns提供商把域名解析到你的云服务器就可以通过域名访问了
如果你还想使用https访问,请继续看(以cloudflare为例)
登录cloudflare,点击我的账户资料
在左边点击API令牌,选择API 令牌
行对应的创建令牌按钮
进入后选择编辑区域 DNS
,在区域资源
最后一栏选择自己的域名
选择继续以显示摘要
->创建令牌
一定要牢记你的令牌,如果泄露一定要及时删除令牌
在1Panel面板网站栏里点击证书
首先创建DNS账户
名称随便填,类型选择Cloudflare
,email填写注册cloudflare的邮箱,API Token填写刚才获取的令牌
然后创建Acme 账户
邮箱填你的邮箱,类型选Let's Encrypt,加密算法建议不要选太简单的
完成后点击申请证书,填入你的域名,DNS和Acme 账户选你刚刚创建的,点击确认
等待一会就会在日志里看到申请成功的提示
回到网站页面,点击你刚刚创建的反向代理的配置
选项
进入https,启用HTTPS
选择访问HTTP自动跳转到HTTPS
,Acme 账户选择你刚刚创建的,证书就会弹出来
点击保存,再访问你的网站就会看到代表https的锁已经出现了,OpenResty会自动帮你续签证书
2、直接部署frps,安装docker部署nginx proxy manager(0.5G内存左右)
直接部署frps的步骤和frpc大同小异,这里直接给出docker-compose.yml和frps.toml
#docker-compose
services:
frps:
restart: always
network_mode: host
volumes:
- '/root/data/docker_data/frps/frps.toml:/etc/frp/frps.toml'
container_name: frps
image: snowdreamtech/frps
# frps.toml
bindPort = 7000 # 服务端与客户端通信端口
auth.token = "fgewsfes" # 身份验证令牌,frpc要与frps一致
# Server Dashboard,可以查看frp服务状态以及统计信息
webServer.addr = "0.0.0.0" # 后台管理地址 这里不需要改动
webServer.port = 7500 # 后台管理端口
webServer.user = "admin" # 后台登录用户名
webServer.password = "admin" # 后台登录密码
重点是nginx proxy manager的配置,下面是nginx proxy manager的docker-compose
version: '3'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80' # 保持默认即可,不建议修改左侧的80
- '81:81' # 管理面板,冒号左边可以改成自己服务器未被占用的端口
- '443:443' # 保持默认即可,不建议修改左侧的443
volumes:
- ./data:/data # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 data 文件夹中
- ./letsencrypt:/etc/letsencrypt # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 letsencrypt 文件夹中
同样输入docker-compose up -d
拉取镜像创建容器
完成后浏览器输入ip:81(你设置的端口)
进入管理面板,默认账号密码如下
- Email: admin@example.com
- Password: changeme
在添加反向代理之前,确保你已经完成了域名解析(见第一种方式)
在nginx proxy manager里点击Add Proxy
在Domain Names
中填写你的域名,下方填写访问方式,ip(127.0.0.1)和端口
点击Save
就可以了,此时你就可以使用域名访问你的网站了
如果你需要https访问,请继续看
选择刚才创建的反向代理,右边三个点点击Edit
上方找到SSL
进入
第一栏选择Request a new SSL Certificate
,勾选Force SSL
下方输入你的邮箱,勾选最后的同意,点击Save
然后你就可以使用https访问你的网站啦,nginx proxy manager会自动帮你续签证书
3、直接部署frps和nginx(内存大约256M)
直接部署frps可见第二步
下面安装nginx(以Rocky linux为例)
导入nginx库
sudo tee /etc/yum.repos.d/nginx-mainline.repo<<EOF
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/9/x86_64/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF
安装dnf-utils
dnf -y install dnf-utils
安装nginx
dnf -y install nginx
系统自动注册相关服务,此时可用systemd控制nginx
# 启动 nginx
systemctl start nginx.service
# 停止 nginx
systemctl stop nginx.service
# 重启
systemctl reload nginx.service
下面配置反向代理
cd到/usr/local/nginx/conf
目录下,打开nginx.conf
修改配置如下
server {
listen 80; #监听端口,不建议改
server_name yourdomain.com; #你的域名
location / {
root html;
index index.html index.htm;
proxy_pass http://127.0.0.1:8080 #你的反代地址和端口
}
}
然后输入systemctl reload nginx.service
重启nginx,此时你就可以使用域名访问你的网站了
如果你想用https访问,请继续看
首先安装Certbot,Certbot可以帮你申请免费证书
dnf install -y certbot python3-certbot-nginx
安装后开始申请证书(yourdomain.com
替换为你的域名)
certbot --nginx -d yourdomain.com -d www.yourdomain.com
然后打开刚刚的nginx配置文件,修改如下
server {
listen 80;
server_name yourdomain.com; #你的域名
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name yourdomain.com; #你的域名
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256";
location / {
proxy_pass http://localhost:8080; # 你的反代地址和端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
然后输入systemctl reload nginx.service
重启nginx,此时你就可以使用https访问你的网站了
Comments NOTHING