1. 前提条件

想要通过公网访问到位于校园网下的主机时,由于目标主机没有公网ip,无法直接通过SSH连接到远程主机,此时便需要使用内网穿透

想要配置内网穿透,首先必须先要有一台具有公网ip的服务器,如阿里云、腾讯云等服务器

2. frp工作原理

frp为内网穿透用到的开源软件,分为服务端和客户端。服务端运行在有公网ip的服务器上;客户端运行在内网主机上,二者可以进行数据转发。我们连接到客户端指定的端口便可以实现与内网主机连接

3. 配置公网服务器

下载frp库

# 下载
wget https://github.com/fatedier/frp/releases/download/v0.62.1/frp_0.62.1_linux_amd64.tar.gz
# 解压
tar -zxvf ffrp_0.62.1_linux_amd64.tar.gz

打开配置文件

vim frps.toml

修改文件内容

# frps.toml
# frp监听的端口,默认是7000,可以改成其他的
bindPort = 7000
# 授权码,请改成更复杂的
token = 52010  # 这个token之后在客户端会用到

启动frps服务

./frps -c ./frps.toml

为了实现服务后台持续运行,可以将命令放在Tmux中,Tmux的使用请参考Tmux

云服务器上的防火墙上要放行bindPort和客户端中的remotePort两个端口

4. 配置内网客户端

下载frp库

# 下载
wget https://github.com/fatedier/frp/releases/download/v0.62.1/frp_0.62.1_linux_amd64.tar.gz
# 解压
tar -zxvf ffrp_0.62.1_linux_amd64.tar.gz

打开配置文件

vim frpc.toml

修改文件内容

# frpc.toml
serverAddr = "x.x.x.x" # 公网服务器 IP
serverPort = 7000 # 与服务端配置的 bind_port 一致
token = 52010  # 与frps.ini的token一致

[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1" # 内网服务 IP,一般为 127.0.0.1
localPort = 22 # 内网服务的端口
remotePort = 6000 # 外部访问的端口,注意不要与服务端端口冲突

启动frpc服务

./frpc -c ./frpc.toml

为了实现服务后台持续运行,可以将命令放在Tmux中

5. 本地设置

建议使用密钥连接内网主机,具体教程请参考使用SSH

在本地的~/.ssh/config中添加

Host 别名
  HostName 公网IP地址
  User 内网主机用户名
  IdentityFile 内网主机私钥的地址