使用frp实现内网穿透
最近碰见了一件事情,我宿舍的电脑想通过ssh远程连接到实验室,但是实验室的机器没有公网ip,不过能访问外网,经过一番折腾后,终于成功的用frp实现了内网穿透,连上了实验室的电脑
因为当时查各种资料花费时间挺多的,这里把我的经验分享出来,供大家参考
准备工作
- 一台有
公网ip
的服务器 - 需要连接的内网机器
我的机器类型: - 内网机器:Ubuntu18.04
- 服务器:Ubuntu16.04
- 部署好后连接时的主机:Win10 的 Ubuntu 子系统
这里如果没有服务器的话可以去阿里云,腾讯云等租一台,学生机一个月10r,并不贵.
下载并部署frp
frp已经在2018年3月更新到0.25版本了,这里采用的便是此版本
- 先在
服务器
和内网机器
上下载好frp
wget https://github.com/fatedier/frp/releases/download/v0.25.0/frp_0.25.0_linux_amd64.tar.gz
- 将 frps 及 frps.ini 放到具有公网 IP 的机器上。
- 将 frpc 及 frpc.ini 放到处于内网环境的机器上。
- 解压
tar -zxvf frp_0.25.0_linux_amd64.tar.gz
公网机器
登录,然后执行以下命令
cd frp_0.25.0_linux_amd64/
sudo vim frps.ini
修改frps.ini为如下内容,保存并退出
# frps.ini
[common]
bind_port = 7000
最后启动frps并设置后台运行
nohup ./frps -c ./frps.ini &
当看到这一行时,我们就可以ctrl+c退出了:
nohup: 忽略输入并把输出追加到'nohup.out'
如果想确定frp
是否后台运行,可以使用以下命令查看
ps -ef | grep frp
内网机器
执行以下命令
cd frp_0.25.0_linux_amd64/
sudo vim frpc.ini
将frpc.ini修改为如下形式:
# frpc.ini
[common]
server_addr = x.x.x.x #这里填自己公网机器的ip
server_port = 7000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000#用于登录的端口号
保存并退出
然后在 frp_0.25.0_linux_amd64/
目录下输入./frpc -c ./frpc.ini
并运行,显示有success即可
连接到内网
frp部署好后,我们只需要ssh 内网用户名@公网ip -p -6000
,即可成功登录
文件访问
如果要需要用到文件访问,则frpc.ini中的内容如下:
# frpc.ini
[common]
server_addr = x.x.x.x#地址填自己服务器ip
server_port = 7000
#以下内容为文件访问所要添加的,如果想远程连接,把上面的[ssh]模块添加在后面即可
[test_static_file]
type = tcp
remote_port = 1234#这里默认的6000端口我用于内网穿透了,就换了1234端口
plugin = static_file
# 要对外暴露的文件目录
plugin_local_path = /tmp/file#绝对路径
# 访问 url 中会被去除的前缀,保留的内容即为要访问的文件路径
#plugin_strip_prefix = static 可不选,如要使用前缀去掉注释即可
plugin_http_user = abc #访问文件所需要的用户名,可不选
plugin_http_passwd = abc #密码,可不选
然后我们就可以通过浏览器访问 http://x.x.x.x:1234来查看位于 /tmp/file 目录下的文件了,会要求输入已设置好的用户名和密码(如果没设置则可直接查看)。