江湖夜雨十年灯

ubuntu 下的 frp 内网穿透

李二花 / 2020-03-10


关键词:ubuntu, frp, 内网穿透

ubuntu 下 frp 内网穿透

如果你在你自己的电脑开启了一个内网服务, 但是又想他可以在外网访问, 这个时候你就需要一个内网穿透工具了, 我一般用 frp 来处理.

frp 是一个 C/S 架构的应用, 需要在外网机器上安装 server 端,内网机器上安装 client 端。

服务端安装

此地址下载需要平台的二进制文件,比如 ubuntu 环境下, 下载如下图所示的文件即可:

将文件放到选定的目录下边,我一般选择 /opt 目录,并将执行的命令软链接到 /usr/local/bin 下。

具体的操作如下:

# 假设我把 frp 放到了 /opt 下
cd /opt/frp
# 编辑好 frps.ini 之后
mkdir -p /etc/frp
cp frps.ini /etc/frp/
ln -s /opt/frp/frps /usr/local/bin/frps

cp system/frps.service /usr/lib/systemd/system/frps.service
# 然后编辑 frps.service 文件,将里面的执行的命令的路径写 /usr/local/bin/frps

systemctl daemon-reload  # 重载 systemctl 配置文件
systemctl start frps.service # 启动服务 
systemctl enable frps.service # 设置为开机启动

下面的 frps.ini 配置文件, 注意把注释要删掉

[common]
bind_port = 7000
dashboard_port = 7500  # 通过这个端口可以访问你的 dashboard,记得防火墙放行这个端口
token = 12345678
dashboard_user = 你自己设置的 dashboard 用户名
dashboard_pwd = 你自己设置的 dashboard 密码
vhost_http_port = 10080  # 提供 HTTP 服务的端口
vhost_https_port = 10443

防火墙放行端口, 如果是云服务,还要记得在 console 里把端口开放了。

# 添加监听端口
firewall-cmd --permanent --add-port=7000/tcp
# 添加管理后台端口
firewall-cmd --permanent --add-port=7500/tcp
firewall-cmd --reload

客户端安装

服务端安装成功后,客户端的安装也是一样的,不同的就是使用的是 frpc,配置文件使用的是 frpc.ini.

当然这个我说的是 linux 环境下,如果是 mac 或者 windows 那么情况就就要自己掌握了,这里我介绍的仅仅是在 linux 下的,具体的配置文件如下:

# 服务端配置
[common]
server_addr = 服务器ip
# 请换成设置的服务器端口
server_port = 7000
token = 12345678 # 跟 server 配置的 token 保持一致即可

# 配置ssh服务
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 自定义的远程服务器端口,例如 2222

# 配置http服务,可用于小程序开发、远程调试等
[web]
type = http
local_ip = 127.0.0.1
local_port = 8080 # 这个端口尽量不要和 vhost_http_port 一致
custom_domains = myhost.com # 服务端配置好的域名
# remote_port = 自定义的远程服务器端口,例如 10080, 和 vhost_http_port 一个配置即可, 也可以不配置

特别的讲一下 web 配置的处理,因为我们在 server 上已经配置了 vhost_http_port 是 10080,所以这个时候其实只需要访问 10080 端口即可拿到服务。同时需要在内网服务器内 8080 端口开启一个服务:

python -m SimpleHTTPServer 8080

这个时候,我们直接访问 myhost.com:10080 即可访问到这个 python 服务,如果有不明白不清楚的,请查看这里.

配置文件的注意事项:

  1. 一个服务端可以同时给多个客户端使用

  2. [ssh] 这样的名称必须全局唯一,即就算有多个客户端,也只能使用一次,其他的可以用 [ssh2] 、[ssh3] 等;

  3. 除了 type 为 http/https,端口只能被一个服务使用

  4. 如果用的 nat vps,remote_port 请改成映射后的端口

客户端配置好后,需要开放服务端的如下端口, 同时在云服务的 console 上也把这些端口开放:

firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --permanent --add-port=10080/tcp
firewall-cmd --reload

当客户端和服务端服务都启动之后,查看 dashboard ,就可以看到服务的连接情况:

ssh 登陆服务器

首先确保机器上安装了 ssh server, 并且服务启动了,具体看这里

通过 SSH 访问内网机器,假设内网机器用户名为 fupeng, 而外网的服务器地址是 a.b.c.d

ssh -oPort=2222 [email protected]

然后输入密码即可,如果没有密码,或者使用了密钥,配置好密钥的地址也可以直接访问。

例子:

按照我上面的配置,我要是向访问我自己的机器

  1. 确保 openssh-server 安装并启动了;
  2. 这台机器上找一个用户,记住他的名字 fupeng 和密码 passwd;
  3. 确认安装 frps 的机器的地址是 address;
  4. ssh -oPort=2222 fupeng@address 然后输入密码 passwd 即可登陆服务器了。

这里的 2222 就是 frpc 里配置好的端口,同时在远程服务器可把这个端口开放了, fupeng 是内网机器的一个用户名, address 是远程机器的公网地址, passwd 是用户 fupeng 的开机登陆密码。

访问 web 服务

我把目前所有的跟 web 服务有关的配置捋一遍即可: https://gofrp.org/docs/examples/vhost-http/

首先是在 frps.ini 里配置的 vhost_http_port 为 10080, 这个是设置监听 HTTP 请求端口为 10080

修改 frpc.ini 文件,假设 frps 所在的服务器的 IP 为 x.x.x.x,localport 为本地机器上 Web 服务监听的端口, 绑定自定义域名为 customdomains。

此时,访问 customdomains:10080 即可访问到 localport 端口的服务。


参考: - https://gofrp.org/docs/examples/ssh/ - https://gofrp.org/docs/examples/vhost-http/ - how to use frp in ubuntu - ubuntu openssh-server