一、为什么进行内网穿透?
1、什么叫内网穿透?
首先我们对内网和外网这两个名词做个解释:
内网:是内部建立的局域网络或办公网络,例如家庭内部网络,公司内部网络;
外网:简单来说就是随时随地可以访问的网络,例如互联网。
内网穿透简单来说就是将内网外网通过隧道打通,让内网的数据外网可以获取。比如常用的办公室软件等,一般在办公室应用,通过拨号上网,没有公网IP,这样办公软件只有在办公室本地的局域网之内才能访问,用了内网穿透方案后,这些基于内网访问的办公室软件就可以在外网家里访问了。
2、哪些情况需要内网穿透?
当我们想把内网的一些资源暴露在公网上时,可以使用内网穿透功能。比如公司的内网服务器,部署了平时需要开发的项目,但是回到家中无法访问,就可以使用内网穿透,将公司内网的接口映射到一台公网的服务器上,用这台公网服务器做转发即可实现在家中也能外网访问。
(1)企业远程办公,远程访问OA系统,以及其他办公软件。
(2)开发人员远程调试,远程访问内网服务器,数据库等。
(3)文件远程共享
二、如何进行内网穿透?
1、Frp工具介绍
frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议.
2、如何安装配置Frp?
(1) 准备工作:想要实现内网穿透功能首先我们需要准备:
· 一台公网服务器(用作frp的服务端),这里我是用的是阿里云免费试用版本Linux服务器。
· 一台需要做转发的内网服务器(用作frp的客户端)也就是我们经常要访问的那台内网服务器。
· 自己的一个个人电脑,且个人电脑中已经安装了一些支持Linux系统远程(ssh)连接的工具例如(Xshell)。
frp的服务端 |
8.138.*.*(这是我的阿里云服务器公网IP) |
具备公网IP |
frp的客户端 |
192.162.130.111 |
公司内网IP |
个人电脑 |
192.168.1.2 |
家庭WiFi网络 |
(2) frp的服务端安装配置
下载frp安装包:https://github.com/fatedier/frp/releases
我们选择对应操作系统的安装包,我这里云服务器系统为CentOS7,可以输入命令查看服务器架构版本,所以我选择下载对应的Linux版本安装包。
x86_64 直接下载 frp_0.51.2_linux_amd64.tar.gz 后缀为 amd64 这个版本即可。可以手动下载到本地,然后通过Xshell传到服务器,也可以直接在外网服务器上下载。
在服务器上/user/local目录下创建frp目录
cd /usr/local/frp
进入到创建的frp目录直接执行一下在线下载命令
wget https://github.com/fatedier/frp/releases/download/v0.51.3/frp_0.51.3_linux_amd64.tar.gz
等待下载完成。
下载完成后在解压到当前目录就行,输入命令:
tar -zxvf frp_0.51.3_linux_amd64.tar.gz
解压完成后cd进入目录:cd frp_0.42.0_linux_amd64
查看当前目录下的文件,其中作为服务端,我们只需要关注 frps 和 frps.ini 文件。我这里已经把frpc 和 frpc.ini 文件删了。
进行服务端frp的配置:vim frps.ini
默认只有一个端口设置。一般没有特殊需求无需修改。也可以增加一些简单配置
[common]
bind_port = 7000
dashboard_port = 7501
dashboard_user = root
dashboard_pwd = root@123
token = frp@123
bind_port |
客户端和服务端连接的端口,在配置客户端的时候要用到。 |
dashboard_port |
服务端可视化界面的端口,若使用7501端口,在配置完成服务启动后可以通过浏览器访问 x.x.x.x:7501。 |
dashboard_user |
打开服务端可视化界面的用户名,可自行设置。 |
dashboard_pwd |
打开服务端可视化界面的密码,可自行设置。 |
token |
用于客户端和服务端连接的口令,可以自行设置,不用和我保持一样,但需要记住,配置客户端的时候会用到。 |
配置完成后进行frps启动:
前台启动,在当前目录执行:./frps -c frps.ini,退出后程序也随即退出。
后台启动,在当前目录执行:nohup ./frps -c ./frps.ini &
启动后通过以下命令查看是否启动成功:ps aux | grep frp
但是大多数情况下我们希望服务端程序能够开机自启动不需要每次手动启动。所以需要将程序启动加入到系统服务中。具体如何设置这里不再赘述直接将启动脚本贴上;
[Unit]
Description=FRP
After=frps.service
[Service]
Type=simple
ExecStart=/usr/local/frp/frp_0.51.3_linux_amd64/frps -c /usr/local/frp/frp_0.51.3_linux_amd64/frps.ini
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true
StandardOutput=syslog
StandardError=inherit
[Install]
WantedBy=multi-user.target
(3) frp的客户端安装配置
前期的安装包下载解压与服务器端相同,首先删掉frps、frps.ini两个文件,然后再进行配置,vi ./frpc.ini
[common]
server_addr = 8.138.*.* #公网服务器ip
server_port = 7000 #与服务端bind_port一致
#公网通过ssh访问内部服务器
[ssh]
type = tcp #连接协议
local_ip = 192.162.130.111 #内网服务器ip
local_port = 22 #ssh默认端口号
remote_port = 6000 #自定义的访问内部ssh端口号
配置完成后进行frpc启动:
前台启动,在当前目录执行:./frpc -c frpc.ini,退出后程序也随即退出。
后台启动,在当前目录执行:nohup ./frpc -c ./frpc.ini &
启动后通过以下命令查看是否启动成功:ps aux | grep frp
也需要增加系统服务实现开机自启动。
注意!!!:由于我们使用的是阿里云的服务器,服务器默认开启的端口可能不包含我们使用的7000,6000,6001端口,因此我们需要在阿里云服务器上进行手动开放对应端口。
进入到阿里云服务控制台,选择网络安全里的安全组,点击管理规则进入到以下界面。
服务器只对流量进来的端口有限制,所以我们只需要在入的方向增加我们对应想要开启的端口即可。
以上都结束以后便可以在私人笔记本上通过Xshell连接到公网服务器上,然后通过公网服务器便可以跳转到内网服务器上了。
这里也需要注意;ssh 跳转时要使用外网服务器的IP,同时指定使用remote_port = 6000 端口。
输入内网服务器的密码,便可以远程访问了。
三、怎么实现本地工具通过穿透直连内网?
到这一步,我们只是实现了远程ssh 访问。更多情况下我们希望可以直接将私人笔记本中访问流量转发请求到内网服务器上。
这时候我们就需要使用另外一个工具了Proxifier。
Proxifier 是一款功能非常强大的socks5客户端,可以让不支持通过代理服务器工作的网络程序能通过HTTPS或SOCKS代理或代理链。支持Xp,Vista,Win7,支持socks4,socks5,http,https代理协议,支持TCP,UDP协议,可以指定端口,指定IP,指定程序等运行模式,兼容性非常好。
Proxifier 的下载安装我这里就不再赘述,自行网上百度。
1、在使用Proxifier前需要在内网服务器上开启socks5端口6001 。这个端口我们在前面云服务上也已经提前开启了。
[plugin_socks5]
type = tcp
local_ip = 192.168.*.*
local_port = 6001
remote_port = 6001
plugin = socks5
plugin_user = abc
plugin_passwd = abc
2、在Proxifier上配置代理服务
增加代理服务器IP为阿里云公网IP,端口为在内网服务器frp客户端上配置的6001,用户名密码在配置中已经配置了,直接填上就行。
配置好代理服务以后需要配置代理规则,在Action选项里选择我们配置好的代理服务器。根据自己需要配置代理转发规则,不清楚的自己百度。
以上都完成以后,我们便可以直接在自己连接在家庭WiFi上的笔记本上直连内网目标机器了。例如访问内网服务器上的数据库,我们可以在笔记本上数据库连接软件上直接输入目标机器的内网IP端口就可以了。也可以在Xshell软件上直接输入目标IP,便可直接连接,方便快捷,不需要再先连接到阿里云服务器之后再通过ssh root@192.168.130.111连接了。