内网穿透
问题:什么是内网穿透,内网穿透的作用是什么?
前提!!!!你得拥有超级管理员的权限,比如root,不然后面的一切免提!
应用场景如下:比如你在家,你想连接学校的服务器,但是因为学校的服务器是局域网,172开头的,我们在家也是一个局域网,不同局域网没办法互连,那就需要一个中间人来进行连接,我们都可以和这个中间人进行连接,所以就需要一个公网IP,这样我们在家的电脑和在学校的服务器都可以连接上去,让这个中间人为我们传递数据。如下图所示。以下假设的IP地址没有任何实际意义,只是作为假设,特此声明。
所以引出了内网穿透所需要的资源:
(1)学校服务器的IP地址:这里我们假设是上图的172.22.33.44
(2)公网的IP地址(去阿里云租一个,新用户免费3个月,租ECS服务器,租过的话换个手机号就能租个新的了,或者买一个,学生优惠99一年)服务器IP:8.138.66.121
(3)frp内网穿透工具(注意下载的版本,以下参考是x86的版本,所以下载amd64)
现在我们已经拥有公网的IP了,学校的服务器和家里的电脑都是联网的,所以可以Ping通ECS服务器。现在正式开始配置frp。
1. 服务器端,也就是我们租的那台服务器,我们用来作为Service端。
sudo apt-get update
wget https://github.com/fatedier/frp/releases/download/v0.53.2/frp_0.53.2_linux_amd64.tar.gz
tar -zxvf frp_0.53.2_linux_amd64.tar.gz #解压缩:tar xvf 文件名
cd frp_0.53.2_linux_amd64 #进入解压目录
#修改frps.toml文件
sudo vim ./frps.toml
添加以下内容:
# 设置frps端的监听端口
bindPort = 7000
下面方法是一次性的,关机重启之后就要将服务重新开启。
#在frp_0.17.0_linux_amd64目录下,临时启动命令
./frps -c ./frps.toml
#后台保持启动
nohup ./frps -c ./frps.toml &
故引出开机自启动服务器,也就是写一个脚本
sudo vim /etc/systemd/system/frps.service
注意ExecStart改为实际的存放路径
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动命令,改为实际存放frps的路径
ExecStart = /home/frp_0.53.2_linux_amd64/frps -c /home/frp_0.53.2_linux_amd64/frps.toml
[Install]
WantedBy = multi-user.target
# 启动服务
systemctl start frps
# 查看服务状态
systemctl status frps
# 重启服务
systemctl restart frps
# 开机自启动
systemctl enable frps
到此为止 服务器端就配置好了,该配置客户端,也就是我们的学校的服务器,需要超级管理员权限!!!再次提醒。
2. 客户端,学校的服务器
第一步也是先下载frp,但是在客户端使用的是frpc,服务器端是frps
sudo apt-get update
wget https://github.com/fatedier/frp/releases/download/v0.53.2/frp_0.53.2_linux_amd64.tar.gz
tar -zxvf frp_0.53.2_linux_amd64.tar.gz #解压缩:tar xvf 文件名
cd frp_0.53.2_linux_amd64 #进入解压目录
#修改frps.toml文件
sudo vim ./frpc.toml
在frpc.toml中配置文件
serverAddr = "8.138.66.121" #我们租到服务器的递增
serverPort = 7000 #我们在租到服务器中frps.toml写的监听端口号
[[proxies]]
name = "test-tcp" #可以随便取一个,但是不要取ssh,可能会发生冲突
type = "tcp" #网络连接方式,不用改
localIP = "127.0.0.1" #不用改
localPort = 22 #不同改
remotePort = 6000 #不用改,6000我们后面会用来连接
临时启动
#临时启动
./frpc -c ./frpc.ini
#后台保持启动
nohup ./frpc -c ./frpc.toml &
开机自启动
同样在ExecStart更改为真实的frp工具存放路径
[Unit]
Description=frpc
After=syslog.target network.target
Wants=network.target
[Service]
Type=simple
ExecStart=/usr/local/frp_0.53.2_linux_amd64/frpc -c /usr/local/frp_0.53.2_linux_amd64/frpc.toml
Restart= always
RestartSec=1min
[Install]
WantedBy=multi-user.target
# 启动服务
systemctl start frpc
# 查看服务状态
systemctl status frpc
# 重启服务
systemctl restart frpc
# 开机自启动
systemctl enable frpc
这样整个过程就配置好了。
3.测试
在我们租阿里云服务器上输入指令,下面的User是你要连接的用户名
ssh -p 6000 User@127.0.0.1
然后输入你用户的密码就可以连接上去了。
4. 应用:在Vscode上登录,且完成免密登录。
(1)下载插件Remote-SSH
(2)然后点击图标,如下图
(3)接着修改配置文件,点击小齿轮
(4)进入配置文件,修改配置文件,第一个Host,需要填我们在阿里云租到服务器的公网IP,第二个Host只需要改最后一行的那个数字改为公网IP就行了。
Host 8.138.66.121
HostName 8.138.66.121
User root
Port 22
Host 127.0.0.1
HostName 127.0.0.1
Port 6000
User XXX
ProxyCommand ssh -W %h:%p 8.138.66.121
(5)这样我们点击连接127.0.0.1就会连接到我们的服务器了,简单来说,就是把公网服务器作为跳板,跳到了我们的学校的服务器。但是需要输入俩次密码,是不是很麻烦!!!!
5.免密登录
免密登录需要用到id_rsa.pub这个文件和authorized_keys这个文件
(1)先免密登录到我们的跳板,也就是租的阿里云服务器。将我们本地下生成的id_rsa.pub文件复制到阿里云服务器上,如果本地没有,就先生成,生成代码如下:
ssh-keygen -t rsa
一般来说会在c:\users\XXX.ssh下出现这个文件。
(2)复制的方式可以通过终端文件windterm或MobaXterm直接上传,或者使用命令scp传输,具体scp命令可以自己搜一下,反正要将id_rsa.pub复制到阿里云服务器上,然后为了防止覆盖authorized_keys文件,我们使用拼接的方式,如下:
cat id_rsa.pub > authorized_keys
这样我们就实现了免密登录到阿里云服务器,完成了第一次飞跃。
(3)接下来同样的方式完成第二次飞跃,将在本地电脑,也就是我们第一次复制到阿里云服务器上的id_rsa.pub同样复制到学校服务器上的.ssh文件夹下,完成第二步同样的操作。
这样我们就可以免密登录了
6. 需要注意的问题
(1)如果在下载frp的时候过慢,可以在本地下载好,在移动到服务器上去,因为是在github上下载的
下载链接https://github.com/fatedier/frp/releases。注意需要下载的版本。./frpc: cannot execute binary file: Exec format error,就是版本不对,确认一下版本。
(2)自启动脚本的frp工具的实际路径得设置好
(3)如果阿里云服务器上和学校的服务器上没有.ssh文件,可以自己生成,生成方式如第五点免密登录的第一步,生成后,可以删掉原本的id_rsa.pub,用我们复制过来的。
7. 引用
[1] https://blog.csdn.net/deng_xj/article/details/88952420
[2] https://zhuanlan.zhihu.com/p/572431267
[3] https://blog.csdn.net/xuzhongyi103/article/details/134363523
[4] https://blog.csdn.net/weixin_43863869/article/details/135042123
[5] https://blog.csdn.net/lixuande19871015/article/details/98613711