配置内网穿透
介绍
内网穿透,顾名思义就是从外网访问一个在内网的服务器。我们实验室的 GPU 服务器都是在内网里面,远程访问非常不方便,为了以防万一,还是需要配配置一个内网穿透。
frp
这里介绍使用 frp 配置内网穿透的过程。
frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。
Requirements
- 一个有外网 ip 的服务器:作为内网服务器与客户端的中介
- frp 运行文件:这个服务器和客户端都要下载,链接在这里
服务器配置
- 下载 frp 文件,解压
- 进入相应文件夹,编辑 frps.ini
# frps.ini
[common]
bind_port = 7000 # frp运行端口,需要开放防火墙
vhost_http_port = 8080 # http服务端口,可以 和 bind_port 相同
- 启动 ./frps -c ./frps.ini
客户端配置
- 下载 frp 文件,解压
- 进入相应文件夹,编辑 frpc.ini(注意是 frpc)
# frpc.ini
[common]
server_addr = 上一步的服务器地址
server_port = 上一步填写的端口
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000 # 通过这个端口来访问
- 启动 ./frpc -c ./frpc.ini
- 使用 ssh 访问
ssh -oPort 6000 ssh_name@ssh_ip
多个客户端配置
多个客户端配置只要 ssh 下的 remote_port 不冲突即可,还有一个地方要注意就是把 [ssh]
改成 [ssh2]
(不同配置之间不重复)
# frpc2.ini
[common]
server_addr = 上一步的服务器地址
server_port = 上一步填写的端口
[ssh2]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6001 # 这个地方不冲突即可
# 使用 ssh 访问 ssh -oPort 6001 ssh_name@ssh_ip
配置客户端 http 访问
- 修改客户端上 frpc.ini 文件,加入以下内容
[web]
type = http
local_port = 80 # 或者是其他的端口也都可以
custom_domains = www.example.com # 这个地方也可以直接写 ip
- 访问网页
www.example.com:8080
(这个端口是服务器 frps.ini 里面的 vhost_http_port)
将 frp 添加到启动项
sudo vim /lib/systemd/system/frps.service
,添加以下内容
[Unit]
Description=frps
After=network.target
[Service]
TimeoutStartSec=30
ExecStart=${frps的绝对路径} -c ${frps.ini的绝对路径}
ExecStop=/bin/kill $MAINPID
[Install]
WantedBy=multi-user.target
- 启用服务
systemctl enable frps
systemctl start frps
systemctl status frps
访问
之后就可以通过配置的端口来进行访问了,比如 ssh 用 6000 端口
ssh -oPort=6000 username@ip_address