利用FRP和Nginx-Proxy-Manager为内网设备提供内网穿透服务

利用FRP和Nginx-Proxy-Manager为内网设备提供内网穿透服务

内网穿透,从未如此简单

基于Docker的FRP内网穿透部署

服务器搭建(FRPS)

一键脚本

wget https://raw.githubusercontent.com/stilleshan/frps/master/frps_linux_install.sh && chmod +x frps_linux_install.sh && ./frps_linux_install.sh

# 以下为国内镜像

wget https://github.ioiox.com/stilleshan/frps/raw/branch/master/frps_linux_install.sh && chmod +x frps_linux_install.sh && ./frps_linux_install.sh

vi /usr/local/frp/frps.toml
# 修改 frps.toml 配置
sudo systemctl restart frps
# 重启 frps 服务即可生效

# 卸载

wget https://raw.githubusercontent.com/stilleshan/frps/master/frps_linux_uninstall.sh && chmod +x frps_linux_uninstall.sh && ./frps_linux_uninstall.sh

# 以下为国内镜像

wget https://github.ioiox.com/stilleshan/frps/raw/branch/master/frps_linux_uninstall.sh && chmod +x frps_linux_uninstall.sh && ./frps_linux_uninstall.sh

sudo systemctl start frps
# 启动服务 
sudo systemctl enable frps
# 开机自启
sudo systemctl status frps
# 状态查询
sudo systemctl restart frps
# 重启服务
sudo systemctl stop frps
# 停止服务

docker-compose方式

sudo -i

mkdir -p /root/data/docker_data/frps

cd /root/data/docker_data/frps

touch frps.toml

touch docker-compose.yml

frps.toml 内容如下:

[common]

# frp 监听端口,与客户端绑定端口

bind_port= 5443
kcp_bind_port = 5443


# dashboard用户名

dashboard_user= admin

# dashboard密码

dashboard_pwd= admin

# dashboard端口,启动成功后可通过浏览器访问如http://ip:9527

dashboard_port= 9527

# 设置客户端token,对应客户端有页需要配置一定要记住,如果客户端不填写你连不上服务端

token = 123456789

docker-compose.yml 内容如下

services:
    frps:
        restart: always
        network_mode: host
        volumes:
            - './frps.toml:/etc/frp/frps.toml'
        container_name: frps
        image: snowdreamtech/frps

启动容器

docker-compose up -d

好了,这边 frp 服务端我们就已经搞定了。(如果有更高级的需求,可以自行参考官方文档来添加内容。)

客户端搭建(FRPC)

其实核心是一样的,只不过修改一下配置文件。

一键脚本

wget https://raw.githubusercontent.com/stilleshan/frpc/master/frpc_linux_install.sh && chmod +x frpc_linux_install.sh && ./frpc_linux_install.sh

# 以下为国内镜像

wget https://github.ioiox.com/stilleshan/frpc/raw/branch/master/frpc_linux_install.sh && chmod +x frpc_linux_install.sh && ./frpc_linux_install.sh

vi /usr/local/frp/frpc.toml
# 修改 frps.toml 配置
sudo systemctl restart frpc
# 重启 frps 服务即可生效

# 卸载

wget https://raw.githubusercontent.com/stilleshan/frpc/master/frpc_linux_uninstall.sh && chmod +x frpc_linux_uninstall.sh && ./frpc_linux_uninstall.sh

# 以下为国内镜像

wget https://github.ioiox.com/stilleshan/frpc/raw/branch/master/frpc_linux_uninstall.sh && chmod +x frpc_linux_uninstall.sh && ./frpc_linux_uninstall.sh

sudo systemctl start frpc
# 启动服务 
sudo systemctl enable frpc
# 开机自启
sudo systemctl status frpc
# 状态查询
sudo systemctl restart frpc
# 重启服务
sudo systemctl stop frpc
# 停止服务

docker-compose方式

sudo -i

mkdir -p /root/data/docker_data/frpc

cd /root/data/docker_data/frpc

touch frpc.toml

touch docker-compose.yml

frpc.toml 内容如下:

# frpc.toml
[common]
server_addr = 你的vps公网ip
server_port = 5443
token = 123456789

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 3000

#[] 内填服务名,可自定义
#type 网络类型,默认就行
#local_ip 默认本地回环ip,不用改
#local_port 本机服务端口号,如AList是5244就填5244
#remote_port 服务端未占用端口号,可自定义
#需要几个服务就按这个格式加几个

[AList]
type = tcp
local_ip = 127.0.0.1
local_port = 5443
remote_port = 3001

docker-compose.yml 内容如下

services:
    frpc:
        restart: always
        network_mode: host
        volumes:
            - './frpc.toml:/etc/frp/frpc.toml'
        container_name: frpc
        image: snowdreamtech/frpc

启动容器

docker-compose up -d

基于Docker的Nginx-Proxy-Manager反向代理部署

安装Nginx-Proxy-Manager

创建一下安装的目录

sudo -i

mkdir -p /root/data/docker_data/npm

cd /root/data/docker_data/npm

touch docker-compose.yml

docker-compose.yml 内容如下

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 
      - ./letsencrypt:/etc/letsencrypt 

查看端口是否被占用(以 81 为例),输入

lsof -i:81  #查看 81 端口是否被占用,如果被占用,重新自定义一个端口

如果啥也没出现,表示端口未被占用

如果出现

-bash: lsof: command not found

运行

apt install lsof  #安装 lsof

启动容器

cd /root/data/docker_data/npm   # 来到 dockercompose 文件所在的文件夹下

docker-compose up -d 

默认登陆名和密码

Email:    admin@example.com
Password: changeme

更新 Nginx Proxy Manager

cd /root/data/docker_data/npm

docker-compose down 

cp -r /root/data/docker_data/npm /root/data/docker_data/npm.archive  # 万事先备份,以防万一

docker-compose pull

docker-compose up -d    # 请不要使用 docker-compose stop 来停止容器,因为这么做需要额外的时间等待容器停止;docker-compose up -d 直接升级容器时会自动停止并立刻重建新的容器,完全没有必要浪费那些时间。

docker image prune  # prune 命令用来删除不再使用的 docker 对象。删除所有未被 tag 标记和未被容器使用的镜像

提示

WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] 

输入 y

卸载 Nginx Proxy Manager

cd /root/data/docker_data/npm

docker-compose down 

rm -rf /root/data/docker_data/npm  # 完全删除映射到本地的数据

忘记 Nginx Proxy Manager 密码怎么办

SQLite(自 2021 年 11 月起默认)

恢复默认账户

docker ps #查看容器名称

docker exec -it <container-name> sh #<container-name>替换为npm容器名称

apt update && apt install sqlite3 -y

sqlite3 /data/database.sqlite

现在您已进入SQL模式,将所有用户的状态设置为已删除

UPDATE user SET is_deleted=1;

.exit

exit

重启容器

使用账户名admin@example.com密码changeme登录npm

恢复之前的账户

docker exec -it <container-name> sh #<container-name>替换为npm容器名称

apt update && apt install sqlite3 -y

sqlite3 /data/database.sqlite

UPDATE user SET is_deleted=0;

.exit

exit

MySQL(2021 年 11 月之前默认)

恢复默认账户

docker exec -it <container-name> sh

mysql -u root -p

USE npm;

UPDATE user SET is_deleted=1;

quit

exit

重启容器

使用账户名admin@example.com密码changeme登录npm

恢复之前的账户

docker exec -it <container-name> sh

mysql -u root -p

USE npm;

UPDATE user SET is_deleted=0;

quit

exit

LICENSED UNDER CC BY-NC-SA 4.0
Comment