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 = yeyuqiudeng.com # 服务端配置好的域名
# remote_port = 自定义的远程服务器端口,例如 10080, 和 vhost_http_port 一个配置即可, 也可以不配置
特别的讲一下 web 配置的处理,因为我们在 server 上已经配置了 vhosthttpport 是 10080,所以这个时候其实只需要访问 10080 端口即可拿到服务。同时需要在内网服务器内 8080 端口开启一个服务:
python -m SimpleHTTPServer 8080
这个时候,我们直接访问 yeyuqiudeng.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]
然后输入密码即可,如果没有密码,或者使用了密钥,配置好密钥的地址也可以直接访问。
例子:
按照我上面的配置,我要是向访问我自己的机器
- 确保 openssh-server 安装并启动了;
- 这台机器上找一个用户,记住他的名字 fupeng 和密码 passwd;
- 确认安装 frps 的机器的地址是 address;
- ssh -oPort=2222 fupeng@address 然后输入密码 passwd 即可登陆服务器了。
这里的 2222 就是 frpc 里配置好的端口,同时在远程服务器可把这个端口开放了, fupeng 是内网机器的一个用户名, address 是远程机器的公网地址, passwd 是用户 fupeng 的开机登陆密码。
访问 web 服务
我把目前所有的跟 web 服务有关的配置捋一遍即可: https://gofrp.org/docs/examples/vhost-http/
首先是在 frps.ini 里配置的 vhosthttpport 为 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