内网,就是在公司或者家庭内部,建立的局域网络或者是办公网络,可以实现多台电脑之间的资源共享,包括设备、资料、数据等。而外网则是通过一个网关与其它的网络系统连接,相对于内网而言,这种网络系统称之为外部网络,常见的就是我们日常使用的互联网。
一般而言,在没有固定公网IP的情况下,外网设备无法直接访问内网设备。而内网穿透技术,顾名思义就是能让外网的设备找到处于内网的设备,从而实现数据通信。
内网穿透的原理
内网穿透,又称为NAT穿透。NAT背后的设备,它们的主要特点是 ,可以访问外网,但不能被外网设备有效访问。基于这一特点,NAT穿透技术是让NAT背后的设备,先访问指定的外网服务器,由指定的外网服务器搭建桥梁,打通内、外网设备的访问通道,实现外网设备访问到内网设备。
该技术除了可以访问隐藏在NAT后的设备,同样可以穿透防火墙。这是因为防火墙一般只拦截了入站没有拦截出站,所以也可以让防火墙内的设备对外提供服务。
由于内网设备并不是与外网设备直接相连,所以在安全性上是毋庸置疑的,内网穿透可以说是安全与效率兼得。
kali(192.168.64.129)下载 花生壳
┌──(root?kali)-[~]
└─# wget "https://dl.oray.com/hsk/linux/phddns_5.3.0_amd64.deb" -O phddns_5.3.0_amd64.deb
┌──(root?kali)-[~]
└─# dpkg -i phddns_5.3.0_amd64.deb
浏览器设置内网穿透到CentOS(192.168.64.159)
访问域名成功
中文文档地址:https://gofrp.org/docs/
github 下载地址:https://github.com/fatedier/frp/releases
上传到服务器端
[root@VM-0-14-centos ~]# tar xf frp_0.53.2_linux_arm64.tar.gz
[root@VM-0-14-centos ~]# cd frp_0.53.2_linux_arm64/
[root@VM-0-14-centos frp_0.53.2_linux_arm64]# ls
frpc frpc.toml frps frps.toml LICENSE
[root@VM-0-14-centos ~]# vim frps.toml
frps.toml
{必选} 客户端与该端口建立连接
bindPort = 37000
(可选)配置 frp 仪表盘以及认证
我们前面启动服务端仅配置了侦听端口,实际上 frp 服务端有很多配置参数,比如 frp 可以提供 web 界面查看所有访问请求的详细信息。以及服务端和客户端连接时进行认证,否则其他人都可以映射 到你的 frp 服务器。
frps.toml
bindPort = 37000 #{必选} 客户端与该端口建立连接
log.to = "console" #{可选} 日志配置,通过打印的方式输出日志
vhostHTTPPort = 37100 #{可选} http代理需要,当访问该端口时跳到对应本地frpc代理,如果要发布 web 服务则需配置该项。
vhostHTTPSPort = 37200 #{可选} https代理需要,当访问该端口时跳到对应本地frpc代理
transport.tcpMux = true #tcp流多路复用(优化传输,需一致)
#身份验证
auth.method = "token" #{可选}身份验证方式
auth.token = "password" #token设置密码,用于通过身份验证创建连接
#frp服务仪表板配置
webServer.port = 37300 #{也可自行修改端口}
webServer.addr = "0.0.0.0" #服务器的内网ip或者域名
webServer.user = "admin" #登录用户名{可自行修改}
webServer.password = "qwe@@@123456789AAAAAAAAA" #登录密码{可自行修改}
启动frp服务(单次运行)
[root@VM-0-14-centos frp_0.53.2_linux_amd64]# ./frps -c ./frps.toml
在本地 Kali 启动客户端
┌──(root?kali)-[~]
└─# tar -zxvf frp_0.53.2_linux_amd64.tar.gz
┌──(root?kali)-[~]
└─# cd frp_0.53.2_linux_amd64
┌──(root?kali)-[~/frp_0.53.2_linux_amd64]
└─# vim frpc.toml
配置frpc.toml
serverAddr = "服务器公网ip"
serverPort = 37000
auth.token = "password"
[[proxies]]
name = "test-tcp"
type = "tcp"
localIP = "192.168.64.159"
localPort = 80
remotePort = 37001
common 配置指定了服务端 IP 地址和端口,这样客户端可以和服务端之间建立通讯。
配置中指定了协议为tcp,映射IP:192.168.64.159 本地端口:80 ,映射到服务端端口:37001,如果配置成功访问云主机公网 IP 的37001 端口表示访问我们内网CentOS主机 80 端口。
┌──(root?kali)-[~/frp_0.53.2_linux_amd64]
└─# ./frpc -c frpc.toml
启动成功
查看 server 端日志
内网穿透成功
查看仪表盘