内网穿透
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 frp_0.62.1_linux_amd64.tar.gz
打开配置文件
vim frps.toml
修改文件内容
# frps.toml
# frp监听的端口,默认是7000,可以改成其他的
bindPort = 7000
# 用于客户端和服务器通信的身份验证令牌
auth.method = "token"
# 秘钥格式建议配置 用户+@+密码 的格式,方便区分用户,如下所示:
auth.token = "user1@12345678"
启动frps服务
./frps -c ./frps.toml
为了实现服务后台持续运行,可以将命令放在Tmux中,Tmux的使用请参考Tmux
云服务器上的防火墙上要放行bindPort
和客户端中的remotePort
两个端口
阿里云不仅需要设置防火墙规则,还需要在系统中开放端口
(1)先看看服务器是否开启了任务监听对应端口,我这里端口是7000
sudo netstat -tunlp | grep 7000
(2)如果任务已开始监听,然后看看防火墙是否开放了这个端口,很重要
sudo iptables -L -n --line-numbers | grep 7000
(3)如果防火墙没有开启这个端口,需要自己添加规则开启
sudo iptables -I INPUT -ptcp --dport 7000 -j ACCEPT
(4)补充iptables相关命令
查找所有规则
sudo iptables -L INPUT --line-numbers
4. 配置内网客户端
下载frp库
# 下载
wget https://github.com/fatedier/frp/releases/download/v0.62.1/frp_0.62.1_linux_amd64.tar.gz
# 解压
tar -zxvf frp_0.62.1_linux_amd64.tar.gz
打开配置文件
vim frpc.toml
修改文件内容
# frpc.toml
serverAddr = "x.x.x.x" # 公网服务器 IP
serverPort = 7000 # 与服务端配置的 bind_port 一致
# 代理名称将会改为 {user}.{proxy},建议配置,取服务器上的token中@前部分。
user = "user1"
auth.method = "token"
auth.token = "user1@12345678"
[[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 内网主机私钥的地址
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 雯欂の修仙笔记!