0%

frp内网穿透

最近用斐讯N1刷了Ubuntu系统,作为一个小型的服务器,偶尔需要在外网访问,内网穿透的工具有很多,例如花生壳,frp,ngrok等,这里使用一个比较简单配置的frp,是一个可用于内网穿透的高性能的反向代理应用,支持多端口多协议,而且是开源的,能满足大部分的需求

准备

  1. 我们需要一台公网IP的服务器(linux),下面称为服务器
  2. 局域网设备一台(linux),下面称为客户端
  3. 域名(可选)

配置

这里找到对应的版本和系统
我用的是谷歌云,我用的是frp_0.20.0_linux_amd64.tar.gz

1
2
3
4
5
6
7
8
# 下载
wget https://github.com/fatedier/frp/releases/download/v0.20.0/frp_0.20.0_linux_amd64.tar.gz

# 解压
tar -zxvf frp_0.20.0_linux_amd64.tar.gz

# 进入目录
cd frp_0.20.0_linux_amd64

客户端和服务端一样,我用的N1是arm架构的,下载的是frp_0.20.0_linux_arm64.tar.gz

服务器端配置

  1. 先删除客户端用的文件

    1
    2
    rm frpc
    rm frpc.ini
  2. 配置frps.ini

    1
    2
    3
    4
    vim frps.ini

    [common]
    bind_port = 7000

    通常不需要修改

  3. 开启服务

    1
    ./frps -c ./frps.ini

服务端需要监听7000端口给客户端访问,如果用是云服务器,需要看一下入站规则是否允许7000端口,否则客户端会报连接超时

客户端配置

客户端配置与服务端基本相同

  1. 先删除服务端用的文件

    1
    2
    rm frps
    rm frps.ini
  2. 配置frpc.ini, vim frps.ini

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    [common]
    server_addr = 35.221.xx.xx
    server_port = 7000

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

    [http1]
    type = http
    local_port = 80
    remote_port = 6001
    custom_domains = n1.bombox.org

    [http2]
    type = http
    local_port = 8080
    remote_port = 6002
    custom_domains = n1.bombox.org

    【server_addr】为服务器公网IP
    【server_port】为服务器配置的端口
    【remote_port】为通过服务端访问的端口,例如我们通过35.221.xx.xx:6000访问客户端的ssh,通过n1.bombox.org:6001访问客户端的80端口
    【custom_domains】可以绑定自己的子域名,需要在域名解析后台添加一条A记录即可,记录值为服务器IP35.221.xx.xx,如下

  3. 启动

    1
    ./frpc -c ./frpc

    接着我们就通过域名访问客户端了

    1
    2
    3
    ssh -p 6000 root@35.221.xx.xx
    http://h1.bombox.org:6001
    http://h1.bombox.org:6002

后台启动和开机启动

如果上面测试没有问题,我们可以通过后台启动并设置成开机启动

后台运行

1
2
3
4
5
# 服务端(注意后面有个`&`)
nohup /home/bomo/app/frp/frps -c /home/bomo/app/frp/frps.ini &

# 客户端(注意后面有个`&`)
nohup /home/bomo/app/frp/frpc -c /home/bomo/app/frp/frpc.ini &

运行后会返回进程号,也可以通过ps命令查看进程信息

1
ps -aux | grep frp

杀掉进程

1
kill -9 进程号

开机自动启动

使用systemctl来控制启动,先添加frps服务,这里演示服务端的,客户端类似

1
vim /lib/systemd/system/frps.service

写入下面内容,并保存

1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=fraps service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
ExecStart=/path/to/frps -c /path/to/frps.ini

[Install]
WantedBy=multi-user.target

启动服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 启动frps服务
systemctl start frps.service

# 设置开机自启动
systemctl enable frps.service

# 停止开机自启动
systemctl disable frps.service

# 查看服务当前状态
systemctl status frps.service

# 重新启动某服务
systemctl restart frps.service