内网穿透
内网穿透(本文使用frp来搭建)旨在允许外网设备能够与内网设备进行通信,我们知道在计算机网络中,可以用ip来标识一个联网的设备,设备间的通信就通过IP来建立连接。目前广泛应用的IPv4协议使用32个bit位作为IP地址,这样整个IPv4的地址空间就有232个,也就是4294967296个,42亿多看起来是个很大的数字,似乎全世界都用不完,IETF当年也是这么想的,但他们远远低估了互联网的发展速度,随着智能手机、物联网等技术的发展,互联网中的终端数量爆炸式增长,IPv4的地址早在2011年就消耗殆尽。尽管拥有128bit的IPv6已经制定完毕,不过时至今日仍然没有普遍应用,为了应对IPv4地址不足的问题,几十年来也涌现出了诸多技术,如NAT、DHCP、CIDR等等。其中NAT完成了一个公网IP到局域网的地址转换,但也使得我们无法在公网通过指定IP访问局域网的设备。
内网穿透借助一个拥有公网IP的代理服务器来实现,具体来说让内网的主机主动与代理服务器建立通信,并将代理服务器的某个端口映射至内网主机,在公网访问代理服务器端口的流量就会被转发至内网主机,从而实现在公网访问内网设备的效果。
frp
frp是一个开源、跨平台的快速反向代理,可以将NAT或防火墙后面的设备暴露在公网上,它支持TCP和UDP协议,以及其它变种,如XTCP、STCP等,同时frp也支持P2P模式,流量不经过代理服务器转发,而是直接与内网设备进行点对点的通信。
配置部署
在github可以下载frp的最新发行版,提供了linux、windows、macos等平台的不同版本,按需下载即可,下面以linux平台作为代理服务器,windows平台作为内网主机的情景为例介绍frp的部署流程。
配置代理服务器
代理服务器使用腾讯云的轻量级应用服务器,带宽为3Mbps。
- 首先访问Releases · fatedier/frp (github.com),下载 frp_0.52.3_linux_amd64.tar.gz 压缩包并上传至服务器中
- 将压缩包解压至frp部署目录,
tar -xzf frp_0.52.3_linux_amd64.tar.gz -C /usr/local
- 解压后的文件夹包含五个文件,分别是
frps
、frpc
、frps.toml
、frpc.toml
和LICENSE
,在服务器我们只需要frps
和frps.toml
即可 - 使用编辑器打开
frps.toml
(frps的配置文件),设置frp客户端连接的端口,默认为7000
# frps.toml
bindPort = 7000
- 在服务器上启动frps,进入目录执行
./frps -c ./frps.toml
配置客户端
内网主机为windows系统
- 在Releases页面下载frp_0.52.3_windows_amd64.zip,解压到安装目录
- 打开frpc.toml,修改ip和端口
serverAddr = "x.x.x.x"
serverPort = 7000
[[proxies]]
name = "RDP"
type = "tcp"
localIP = "127.0.0.1"
localPort = 3389
remotePort = 6000
- 在内网主机上启动frpc,目录下执行
./frpc -c ./frpc.toml
开机启动
Linux:systemctl
在/lib/systemd/system/
下新建名为frps.service
的文件,填写以下内容
[Unit]
Description=Frp Server Service
After=network.target syslog.target
Wants=network.target network-online.target
[Service]
Type=simple
# 替换root为实际安装路径
ExecStart=/root/frpc/frpc -c /root/frpc/frpc.ini
[Install]
WantedBy=multi-user.target
保存后使用下面的命令来控制程序的状态
$sudo systemctl start frpc
$sudo systemctl enable frpc
$sudo systemctl restart frpc
$sudo systemctl stop frpc
$sudo systemctl status frpc
windows:计划任务和vbs
在frpc
所在目录下新建文本文件,重命名为start.vbs
,使用记事本编辑如下:
Set WinScriptHost = CreateObject("WScript.Shell")
'将下面的目录替换成frpc的实际目录
WinScriptHost.Run Chr(34) & "D:\Program Files (x86)\frp_0.52.3_windows_amd64\frpc.exe" & Chr(34) & " -c " & Chr(34) & "D:\Program Files (x86)\frp_0.52.3_windows_amd64\frpc.toml" & Chr(34), 0
Set WinScriptHost = Nothing
按win+s
,在搜索框中输入任务计划程序并打开,点击左侧创建任务
输入计划名称,选择不管用户是否登录都要运行,切换到触发器选项卡,新建触发器并选择启动时
切换到操作选项卡,新建操作,并选择启动程序,点击浏览,找到vbs启动脚本后点确定完成设置即可。
使用
使用微软的远程桌面添加电脑,输入代理服务器的ip和端口以及内网主机的用户名即可建立连接,验证账户用户密码后就可以开始畅快的远程控制啦