admin管理员组

文章数量:1565368

win10下用frp内网穿透实现ssh远程连接linux服务器

ftp可以利用处于内网或防火墙后的机器,对外网环境提供 http 或 https 服务。由于疫情原因不能回实验室,teamviewer又说检测到商业用途,连接受限,索性自己搭建小型服务器。

拟实现功能:外网通过ssh访问内网机器,内网机器操作系统为ubuntu 16.04

准备

  1. 具有公网ip的服务器

公网ip服务器可以是阿里云,也可以是自己的电脑。如果打算用自己的电脑搭建服务器得去向运营商申请公网ip,申请教程网上很多,博主家里宽带是电信的,打10000转人工服务和他申请后重启下光猫就好了(这里有个小坑,电信默认一段时间后光猫自动断线重连,我这是60小时,这会导致申请的公网ip变动,打电话申请的时候最好让他关了)。

申请到公网ip后下一步要做端口映射。

端口映射

首先得先确定家里网络拓扑结构,拿我家举例,电信的光纤连接到家里的光猫,光猫只连了一个路由器,路由器下连着家里各种上网设备。注意一下,在路由器的局域网中路由器的ip是192.168.0.1,在光猫的局域网中路由器的ip是192.168.1.2

确定好网络拓扑后先去查申请到的公网ip地址,这里方法很多,可以百度“ip”,也可以像我去光猫的设置页面看(反正之后还得在这设置端口映射),电信的光猫设置页面是192.168.1.1,登录的账号密码在光猫背面有。进去后在高级设置里找到网关设置,可以在WAN IP中看到自己的公网ip,我这个就是117开头的


接着去左边的端口映射,“虚拟服务名称”随便填一个就行,方便记忆即可,局域网ip填下一级局域网的ip,服务协议选TCP就行,内部端口和外部端口映射关系满足:117.x.x.x(我家公网IP):外部端口=局域网IP:内部端口。

按照我家的拓扑结构,假如我想将公网IP的8888端口映射到电脑上的8888端口就需要配置两个端口映射,从光猫到路由器和从路由器到电脑。

  1. 在光猫上配置端口映射 117.x.x.x:8888 -> 192.168.1.2:abcd。这里192.168.1.2路由器在光猫的局域网的IP,这个abcd是任意一个端口号;
  2. 在路由器上配置端口映射192.168.0.1:abcd -> 192.168.0.103:8888。这里192.168.0.1是路由器在路由器局域网内的ip地址,abcd是第一步中的那个任意端口号,192.168.0.103是我电脑在路由器局域网内的ip地址。

第一步已经完成了,第二步进路由器的设置网站上,我家的是http://tplogin,应用管理里面有个虚拟服务器,在里面添加端口映射即可,这里外部端口就是第2步的abcd,内部端口就是8888,ip地址就是电脑的ip地址。由于上一张图哪里我设置的abcd就是8888,因此我这外部端口也填8888,协议类型不用选,最后保存即可。

端口映射至此结束,接下来配置frp

frp配置

知乎上有篇文章讲的很好,我参考这个短时间内就搭建好了。五分钟配置frp 内网穿透

首先去github上下载frp,frp下载,选择服务器和客户端对应的版本,像我是打算用win10做服务器,连接在内网的linux深度学习服务器,就下载了windows_amd64.zip和linux_amd64.tar.gz。

下载完成后先配置服务端(本机win10):
解压windows_amd64.zip那个文件,进去后修改配置文件 frps.ini,这个7000可以随意设置,不过最好在10000以上,我这只是为了演示,就不改了。

[common]
bind_port = 7000  #frp服务端端口

复制完了后在命令行或powershell里启动即可

.\frps.exe -c .\frps.ini

接下来配置客户端,把linux_amd64.tar.gz发给linux服务器,该解压的解压,(本人linux小白解压代码都查了半天,这里附上tar.gz的解压代码)

tar -zxvf xxx.tar.gz

解压完了后修改配置文件 frpc.ini,

[common]
server_addr = 117.x.x.x   #frp服务端地址,可以填ip或者域名,我的公网ip是117.x.x.x
server_port = 7000      #frp服务端端口,即填写服务端配置中的 bind_port

[ssh1]
type = tcp              #连接类型,填tcp或udp
local_ip = 127.0.0.1    #填127.0.0.1或内网ip都可以
local_port = 22         #需要转发到的端口,ssh端口是22
remote_port = 5000      #frp服务端的远程监听端口,即你访问服务端的remote_port就相当于访问客户端的 local_port,如果填0则会随机分配一个端口

最后启动客户端,其中,nohup命令可以让你的shell命令忽略SIGHUP信号,即可以使之脱离终端运行;“&”可以让你的命令在后台运行。

$ nohup ./frpc -c frpc.ini &

接下来回到之前讲的端口映射部分,把公网ip上的5000端口与7000端口映射成本机的5000端口与7000端口,这里就不做演示了。

配置到此结束,想访问linux服务器只需在命令行里输入命令,然后输入linux服务器上user的密码即可建立ssh连接,5000是remote_port

ssh -p 5000 user@117.x.x.x

但由于我这台电脑既当服务器,又要通过它远程Linux服务器,而电信光猫不支持在内网访问公网ip,因此命令还需改成本机的5000端口,即

ssh -p 5000 user@127.0.0.1
或者
ssh -p 5000 user@localhost

VS Code远程开发

配置好ssh后光靠命令行去写程序无疑痛苦极了,pycharm支持远程ssh开发,但这是专业版才拥有的高贵功能,博主一介穷逼于是转战VS Code了(它不香吗?)

这里就不继续说下去了,附上链接,各位看客有兴趣可以去设置,商店里下载remote-ssh就行。连接时遇到了一个小坑,不能用ssh -p 5000 user@localhost连接,必须得是ssh -p 5000 user@127.0.0.1。

本文标签: 内网服务器frpSSHLinux