使用frp访问公司内部网站

功能简介

观看之前,建议你有ssh和简单的shell使用经验。

顾名思义,这是一个通过内网穿透自建代理来访问公司内网的教程。说到内网穿透、代理都不是什么新鲜的概念,但是这些工具组合起来确实有很多好玩的地方。在这里,就是他们其中的一种组合游戏。
好戏开始之前,我们先提出几个疑问,让我猜猜你想的对不对。

1. 我在家里可以访问公司内网吗,比如打卡,收发邮件之类的?
2. 我需要哪些必备的东西呢?
3. frp是个什么工具?

那么,带着疑问我们开始吧!

实现原理

frp

一句话来说就是,通过frp把公司计算机的ssh暴露出来,个人计算机使用公司计算机ssh的socks5代理进行上网。

首先介绍一下frp这个软件,经常做微信开发的小伙伴应该有接触到,它是搞内网穿透的。在调试公众号或者小程序接口的时候,需要把开发服务器映射到公网上,这样微信服务器才能成功回调到开发者计算机。但是,我们开发计算机在局域网呀,在使用NAT转换之后,公网服务器无法直接访问局域网计算机;也就是说,我可以访问互联网,但是互联网无法主动访问我。frp就是解决这个问题的,它把我自己的计算机的web服务放到公网上,然后我们就可以从互联网访问到它。

那么话说回来了,这和今天这个话题有什么联系呢?我们要让个人计算机使用公司的计算机网络进行网络访问,就必须把公司的计算机暴露在互联网当中。如下图:
使用frp访问公司内部网站_第1张图片

其实你已经注意到了:把公司计算机直接暴露在公网,会不会不安全呀?当然会,实际使用过程中,一定要按需开启,并且使用安全验证。

frp不仅仅能把web服务暴露在公网,而且还可以把ssh服务暴露在公网上。也就是说,我可以通过个人计算机直接ssh公司的内网的计算机。

ssh

代理我们使用的是ssh的socks5代理,ssh有这样一个功能,就是把ssh服务器当成一个socks5正向的代理,把监听到socks5服务端口的流量转发到ssh服务器上。就可以实现个人计算机通过公司内网计算机进行上网了。

下面介绍需要用到的设备以及环境。

原材料

上面说到,要想实现必须有三台计算机。首先,公司的个人电脑家中的电脑是其中两个,还需要一个公网电脑进行数据中转。

流量转发端

流量转发端是公网中转计算机,它是什么呢?简言之就是有独立ip的服务器,这个很容易就买到了,比如阿里云或者腾讯云什么的,很多小伙伴在双11和和双12,被他们冲了一波业绩吧!现在用起来吧,我这里环境使用Centos7,使用Ubuntu的小伙伴也关系,只是防火墙设置不同而已。

流量提供端

流量提供端为公司的计算机,必须支持ssh服务,Linux和Mac原生支持了,Windows需要额外下载软件进行支持,比如Windows10的内置Ubuntu,我这里使用Mac系统。

流量消费端

流量消费端为个人计算机,可以是Mac、Linux,或者Windows,Android,后两个需要额外软件,iOS没有试过。我这里使用Mac系统。

我个人不建议使用Windows最为搭建这套环境,Windows下的Linux子环境实在是难以折腾,即使通过虚拟机或者bash等折腾成功,还要考虑网络问题。

搭建过程

搭建过程分为以下几步。

1. 在中转服务器和公司计算机之间搭建frp服务。
2. 个人计算机可以通过ssh访问公司计算机。
3. 把个人计算机的ssh流量作为局部代理
4. 设置局部代理

这样一来工作就清晰了起来!

1. 搭建frp服务

frp分为客户端和服务端两个软件,我们可以从 https://github.com/fatedier/frp/releases 获得(他们在同一个压缩内)。其中frps是服务器端,frpc是客户端。把frps放到中转服务器,把frpc放到公司计算机。

同时,不管设计frps还是frpc,都仅仅需要一个软件和一个配置文件即可运行。

搭建中转服务器的frps服务(操作中转服务器)

这一步的目的是建立frp服务器。首先ssh到中转服务器,下载frp软件

wget https://github.com/fatedier/frp/releases/download/v0.23.2/frp_0.23.2_linux_amd64.tar.gz
tar -zxvf frp_0.23.2_linux_amd64.tar.gz

得到解压的文件,我们只需关注frps和frps.ini这两个,其他的可以删除。
编辑frps.ini

[common]
bind_port = 7000

然后运行frp服务端。

./frpc -c ./frpc.ini

当然,为了方便使用,也可以后台运行。

nohup ./frpc -c ./frpc.ini &

搭建公司计算机的frpc服务(操作公司计算机)

这一步要打通公司计算机中转服务器之间的连接。在这之前,首先要确定公司的计算机时候开启ssh服务器。Linux默认都会开启,Windows用户只能去找软件来使用,其中Bitvise SSH Server还不错,使用起来也比较简单,只是收费。Mac系统参考如下:

系统偏好设置 -> 共享 -> 远程登录。勾选上,然后在右边添加自己用户。
使用frp访问公司内部网站_第2张图片
设置好ssh服务之后,请下载frp客户端软件。这里需要frpc和frpc.ini这两个文件,其他都可以删除掉。

下载时候要选择好对应平台再下载。客户端和服务端如果系统平台不一样,就不能用同一份(虽然客户端和服务端在同一个文件夹中)。

然后编辑fric.ini

[common]
server_addr = x.x.x.x
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

注意,这里虽说是在设置公司计算机的客户端配置,但是涉及的到两个端口70006000,在中转服务器中也需要添加防火墙例外规则,腾讯云或则阿里云好像还要添加安全组。

其中,x.x.x.x为你中转服务器的公网ip。server_port是中转服务器和公司服务器通信的端口,remote_port是ssh的虚拟端口,我们连接时候指定的端口就是它。其他的参数都无关紧要,具体可以了解 https://github.com/fatedier/frp 。

现在启动公司计算机的frp客户端

./frpc -c ./frpc.ini

到这里,主要工作基本上已经完成了,现在就来测试一下是否可以从个人计算机通过ssh连接到公司的计算机吧。

2. SSH到公司计算机(操作个人计算机)

如果使用的是mac或者linux可以直接使用下面的命令,连接到公司计算机。如果是windows,需要下载putty或者linux子系统等ssh软件(后文提到)。

ssh -oPort=6000 [用户名]@x.x.x.x

其中,x.x.x.x是你中转服务器的公网ip。注意这里一定要加上面指定的端口,不然会连接到中转服务器的ssh服务。不出什么问题,就可以连接到公司计算机了。

在这个过程中,如果很久都没连接上,或者被远程主动关闭,请检查防火墙的设置。我们可以使用telnet命令测试远程端口是否开启。

教程到这里,好像和代理好像还没有什么太大的关系,仅仅是可以控制公司的计算机而已。不要忘记,ssh有一个很好的功能,就是把远程服务器的流量,变成本地计算机的socks5代理。

3. 设置ssh的socks5代理(操作个人计算机)

好的,现在可以按control+c停止连接。然后,Linux用户和Mac用户可以直接输入以下命令直接开启sock5隧道。

ssh -f -N -D 127.0.0.1:1080 -oPort=6000 [公司计算机账户]@[中转服务里ip]

比如

ssh -f -N -D 127.0.0.1:1080 -oPort=6000 [email protected]

注意以上命令,这里又多出一个1080的端口,这个端口是为本地开的。任何把代理端口指向这个位置的连接,都可以使用这个代理,所以这里要记住这个端口。

如果你想让局域网其他电脑也可以访问,那么把127.0.0.1换成0.0.0.0。

注意:ssh的sock5代理如果长时间不使用会自动断开连接,当然,使用autossh可以解决这个问题。

Windows用户需要额外的软件,推荐使用putty。操作步骤如下:打开putty
使用frp访问公司内部网站_第3张图片
其中x.x.x.x为中转服务ip,端口填写6000

使用frp访问公司内部网站_第4张图片
按照上图操作步骤操作
然后检查路由表,看看是否正常开启。

netstat -n -a

使用frp访问公司内部网站_第5张图片

到此Windows可以开启一个端口为1080的sock5隧道
开启sock5隧道之后,怎么能检测一下呢?打开一个新的Shell,输入

export ALL_PROXY=socks5://127.0.0.1:1080
curl cip.cc

注意,上面的1080就是之前预留的端口,地址127.0.0.1指向本地。接下来使用上面命令看一看公网ip是不是和公司计算机的一样。(PS. 公司计算机也可以输入这个命令查看,或者直接百度关键字ip。如果相同,那么以上过程就全部成功了!

接下来,有了sock5代理,按理说文章应该可以结束了。但是毕竟还没有看到效果,那么接下来简单说说它的几种食用方式,这个过程可以任意发挥,没有固定方式!

通过局部代理上网

上面我们说到,如何把ssh流量变成socks5局部代理,那么现在就是怎么使用这个局部代理了。

命令行代理

这种代理方式只在当前session生效,一旦关闭当前命令行,就会失效。

开启方式 export ALL_PROXY=socks5://127.0.0.1:1080
关闭方式 export ALL_PROXY=
检验方式 curl cip.cc

Mac 全局代理

系统偏好设置 -> 网络 -> 高级 -> 代理 -> socks代理 勾选这个
使用frp访问公司内部网站_第6张图片
点击确定。

Chrome 插件分网址代理

推荐使用插件SwitchyOmega,由于本教程不是讲局部代理使用方式,直接贴这个插件的使用教程 https://github.com/FelisCatus/SwitchyOmega 。
使用frp访问公司内部网站_第7张图片
使用SwitchyOmega可以针对不同网页使用不同的代理方式,比如说,1080端口是访问公司内网的,1088端口是土啬的。它还可以破除公司对于某些网站的限制,同时也代理就不用切来切去了,十分方便。

Proxifier 分应用代理

使用SwitchyOmega可以在访问不同网站的时候使用不同的代理设置,那么Proxifier就可以针对于不同的应用使用不同的代理,甚至切断互联网连接。或者我们可以把上面教程反过来玩,然公司服务器当个人计算机,家中的电脑扮演公司计算机的角色。使某些App走家中的流量,就可以简单破除公司对于某些App的网路限制,比如微信或者音乐视频类软件,但是要注意dns的设置。

它是一个十分优秀的软件,但是需要付费。如果是针对外企用户需要频繁切换网络的用户来说,它的确是一个福音。

注意事项

一般来说,公司的网络安全部都不会允许把公司计算机暴露在公网之下,本文只讨论技术,大家好好玩儿~

你可能感兴趣的:(玩儿,内网穿透,frp)