配置内网穿透

Author Avatar
patrickcty 11月 20, 2019

介绍

内网穿透,顾名思义就是从外网访问一个在内网的服务器。我们实验室的 GPU 服务器都是在内网里面,远程访问非常不方便,为了以防万一,还是需要配配置一个内网穿透。

frp

这里介绍使用 frp 配置内网穿透的过程。

frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。

Requirements

  • 一个有外网 ip 的服务器:作为内网服务器与客户端的中介
  • frp 运行文件:这个服务器和客户端都要下载,链接在这里

服务器配置

  1. 下载 frp 文件,解压
  2. 进入相应文件夹,编辑 frps.ini
# frps.ini
[common]
bind_port = 7000 # frp运行端口,需要开放防火墙
vhost_http_port = 8080 # http服务端口,可以 和 bind_port 相同
  1. 启动 ./frps -c ./frps.ini

客户端配置

  1. 下载 frp 文件,解压
  2. 进入相应文件夹,编辑 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  # 通过这个端口来访问
  1. 启动 ./frpc -c ./frpc.ini
  2. 使用 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 访问

  1. 修改客户端上 frpc.ini 文件,加入以下内容
[web]
type = http
local_port = 80  # 或者是其他的端口也都可以
custom_domains = www.example.com  # 这个地方也可以直接写 ip
  1. 访问网页 www.example.com:8080(这个端口是服务器 frps.ini 里面的 vhost_http_port)

将 frp 添加到启动项

  1. 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
  1. 启用服务
systemctl enable frps
systemctl start frps
systemctl status frps

访问

之后就可以通过配置的端口来进行访问了,比如 ssh 用 6000 端口

ssh -oPort=6000 username@ip_address

参考