内网穿透的实现
什么是内网穿透
- 内网穿透,简单地说就是内网的数据让外网可以获取,可以映射到公共网络上,这样就可以在公共网络上访问内网的数据。
- 内网是不能被外网直接访问的,只能通过一些中转技术,如 DingTalk Design CLI、花生壳、Natap 等工具,让内网“假装”成外网,就是内网穿透。
- 外网主机的 IP 地址的一个端口映射到内网中一台机器,提供相应的服务。当用户访问该 IP 的这个端口时,服务器自动将请求映射到对应局域网内部的机器上。
- 内网穿透扩展了我们之前的工作场景和范围,让使用者可以不局限在内网环境中就可以做到局域网才能做的事情,大大提高了我们的效率。
使用frp来进行内网穿透
简单地说,frp就是一个反向代理软件,它体积轻量但功能很强大,可以使处于内网或防火墙后的设备对外界提供服务,它支持HTTP、TCP、UDP等众多协议。
实现
服务器端
下载解压
1
wget https://github.com/fatedier/frp/releases/download/v0.41.0/frp_0.41.0_linux_amd64.tar.gz
解压:
1
tar -zxvf frp_0.41.0_linux_amd64.tar.gz
重命名:
1
2
3cp -r frp_0.41.0_linux_amd64 frp
rm -r frp_0.41.0_linux_amd64.tar.gz
rm -r frp_0.41.0_linux_amd64进入
1
2cd frp
ls -a我们只需要关注如下几个文件
- frps
- frps.ini
- frpc
frpc.ini
前两个文件(s结尾代表server)分别是服务端程序和服务端配置文件,后两个文件(c结尾代表client)分别是客户端程序和客户端配置文件。
因为我们正在配置服务端,可以删除客户端的两个文件1
2
3rm frpc frpc.ini
y
y
然后修改`frps.ini`文件
1
vim frps.ini
这个文件应有如下格式
1
2
3
4
5
6
7
8
[common]
bind_port = 7000
dashboard_port = 7500
token = 12345678
dashboard_user = admin
dashboard_pwd = admin
vhost_http_port = 10080
vhost_https_port = 10443
> 如果没有必要,端口均可使用默认值,token、user和password项请自行设置。
- “bind_port”表示用于客户端和服务端连接的端口,这个端口号我们之后在配置客户端的时候要用到。
- “dashboard_port”是服务端仪表板的端口,若使用7500端口,在配置完成服务启动后可以通过浏览器访问 x.x.x.x:7500 (其中x.x.x.x为VPS的IP)查看frp服务运行信息。
- “token”是用于客户端和服务端连接的口令,请自行设置并记录,稍后会用到。
- “dashboard_user”和“dashboard_pwd”表示打开仪表板页面登录的用户名和密码,自行设置即可。
- “vhost_http_port”和“vhost_https_port”用于反向代理HTTP主机时使用,本文不涉及HTTP协议,因而照抄或者删除这两条均可。
需要为它设置可执行权限。您可以使用`chmod`命令来设置文件的权限。例如,使用以下命令为`frps`文件添加可执行权限,运行:
1
2
chmod +x frps
./frps -c frps.ini
然后阿里云后台安全组放行相关端口,**如果有宝塔面板,也要放行。**
- 后台运行
1
nohup ./frps -c frps.ini &
客户端
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21[common]
server_addr = 47.94.134.162
server_port = 7000
token = 12345678
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
[rdp]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 7001
[smb]
type = tcp
local_ip = 127.0.0.1
local_port = 445
remote_port = 7002
上面frpc.ini的rdp、smb字段都是自己定义的规则,自定义端口对应时格式如下。
- “[xxx]”表示一个规则名称,自己定义,便于查询即可。
- “type”表示转发的协议类型,有TCP和UDP等选项可以选择,如有需要请自行查询frp手册。
- “local_port”是本地应用的端口号,按照实际应用工作在本机的端口号填写即可。
- “remote_port”是该条规则在服务端开放的端口号,自己填写并记录即可。
> RDP,即Remote Desktop 远程桌面,Windows的RDP默认端口是3389,协议为TCP,建议使用frp远程连接前,在局域网中测试好,能够成功连接后再使用frp穿透连接。
>
> SMB,即Windows文件共享所使用的协议,默认端口号445,协议TCP,本条规则可实现远程文件访问。
- 启动
1
frpc -c frpc.ini
ssh
安装openssh msi
运行
1 | netsh advfirewall firewall add rule name=sshd dir=in action=allow protocol=TCP localport=22 |
评论