科学的公司内网连接技术选型

简介

这篇文章主要介绍如何在家、或者在外出差的时候能够连回办公室的内网办公,享受福报。 本文是一个简介性质的文章,具体技术细节网上有很多博客,况且最近还兴起了用Docker搭建的风潮,不能更方便了。 请不要把本文的技术用于其他用途哦,否则后果自负~(手动狗头)

本文中的技术我们主要评价两个方面:

  1. 第一个是方便易用,不能为了连接一个内网弄的很麻烦,这会降低享受福报的效率。

  2. 第二个是安全隐蔽,假设有坏人在你公司的外面拦截了你的通信,进行中间人攻击(比如,据我所知各大运营商都会对HTTP协议做一定的中间人攻击来注入广告),时不时还根据且听的流量给你断断网或者做重放攻击什么的。我们的连接方式要经得起考验,安全可靠而且隐蔽。

(按说没有那么多狗黑客的,可有的时候就是瘸子的屁股——斜了门了……不知道咋回事,这连接就不能稳定,所以第二项也是非常重要的考量因素。)

内网连接方法介绍

首先假设你在公司有一台Linux服务器,可以搭建各种服务。 这里的Linux也可以是Docker或者WSL系统,但是要设置好宿主机的网络设置。

SSH 隧道

这个是最常用的临时方案,SSH隧道建立方便,可以反向代理映射固定的端口,也可以建立socks代理进行访问。

这里姑且假设你在公司有一台Linux服务器,并且你能以SSH登陆(一般是22端口),那这个时候你可以开通一个隧道,只需要在本机执行命令: ssh -qTNf -D 127.0.0.1:1080 <User name>@<Public IP>

这样就构建了一个端口是1080的socks代理。 参数就不作过多的说明了,网上有很多博客有详细的解说。

如果你在用浏览器,可以尝试安装插件:SwitchyOmega,一般火狐或者Chrome都可以下载。 在配置中使用这个端口连接,就可以达到连接公司内网的目的,这个时候你就可以打开只有在公司内网才能打开的网页。

同时,SSH还可以作为跳板机连接其他内网机器,一般在ssh config里面设置 ProxyCommand ssh -o Compression=no <跳板机> nc %h %p 来做,这里暂时按下不表。

安全性上,SSH采用非对称加密,黑客无法获取通信内容。 缺点是流量特征明显,容易被人刺探到这是个SSH端口(然后经常会收到弱口令攻击),所以密码一定要设置复杂一些。 同时,推荐使用公私钥登陆,而不是密码。

HTTPS 代理

HTTP代理很容易实现,也很容易使用,历史悠久,这里就不赘述了。 但是HTTP代理也存在一个问题:流量透明,别人很轻松就知道你在搞代理,还能知道你在干什么。

所以我们加一层TLS,比如利用Nginx,就可以把一个HTTP的服务转化为HTTPS服务,甚至可以挂在到某个网站的特定的路径下。 如果公司有HTTPS的官网或者博客的话,可以尝试使用这个方法挂载HTTPS代理,记得加上Authentication。这一套都是Nginx反向代理的标准操作了。

并不推荐根路径直接连接作为代理的路径,容易被黑客刺探到这个域名就是做代理的,然后被攻击。

同样,HTTPS代理也可以被SwitchyOmega使用。

PPTP/L2TP/OpenVPN/AnyConnect

这是非常标准的VPN,设计之初也就是为了安全的连接公司内网而设计的,Windows/Linux也有比较好的系统级别的支援。其中L2TP使用的的UDP端口,使用需注意。

唯一的问题在于,如果你的公司或者子公司在海外,因为某种原因(大概是离得太远没信号吧,嗯,一定是),你的PPTP/L2TP/OpenVPN服务会非常不稳定,可以说基本不可用。

如果你有海外公司,但是又一定要享受便利,推荐你配合内网穿透一起使用。

这里的例外是AnyConnect,虽然大家(含SSH)流量特征都很明显,但是由于AnyConnect被大公司使用,海外连接的时候不易出现PPTP那样的不稳定现象。

安全性上基本都没有问题(PPTP除外),只是容易被且听到你在使用的技术。

其他方式

  1. v2ray

理论上说V-Project只是一套协议规范,核心是V-Mess协议。 但是v2ray作为代理工具的确是功能强大,不仅仅是单纯的代理,甚至可以做到规则路由。可以创建诸如A网站使用X代理,B网站不使用,C网站使用Y代理等等复杂规则。 配置过程略痛苦,JSON文件编辑很头疼,经常一写就很长,但是配置好以后使用非常方便。是我强力推荐的工具。 V2Ray在安全上是我见过做的最好的,支持混淆,防止刺探,防止重放攻击。某些黑客基本就是拿刺猬——无从下口了。

  1. Shadowsocks

Shadowsocks也只是一个协议,有很多的实现。 不过作者喝茶了,加上v2ray也支持ss协议,这里不赘述了。 这里对作者说一句Respect,感谢每一个无私开源的人。

需要说一句的是,ShadowsocksR很火,但是并不推荐使用。

  1. GoProxy

GoProxy可以设置一些基础的代理,但是这个工具更大的作用是创建内网穿透,下文会介绍。

内网穿透

大多数的时候,你可能没有公网IP,或者你没有权限使用公网IP,或者因为某种原因你连接不上这个IP(比如你所在的地区屏蔽了这个IP)。

这个时候就需要内网穿透了,说到内网穿透,比较有名的是花生壳。但是花生壳的收费也并不便宜。 当然你也可以自建,自建内网穿透的前提是:

你有一台服务器,并且这台服务器有公网IP。

最简单的方式就是买了,比如百度腾讯阿里美团各种云,缺点是价格贵,公网带宽价格异常的贵,还不如用花生壳。

最好的方法是,尝试在办宽带的时候要求有公网IP(可能会多收钱),如果是静态的IP那就可以直接用IP,如果是动态的IP,那就买个域名做个DDNS。这是我写的阿里云的DDNS方案:TsingJyujing/aliyun-ddns-client,欢迎Fork。

和之前一样,这里的服务器可以用个人电脑代替(可以在家里建立机房,想想就兴奋)。

有了服务器,内网穿透的方案大致有(花生壳以外):

  • Ngrok

  • GoProxy

Ngrok的教程网上一搜一大把,GoProxy的资料少一点,参考官方文档中内网穿透一章

这里我需要评价GoProxy几句:

  1. 这是个开源软件,但是源代码并不是及时更新的,总是晚于二进制包慢一点更新,而且似乎也并不全,所以并不是真正开源。

  2. 曾经在7.8版本的时候我遇到过:

    • GoProxy要自动检查更新

    • 但是GoProxy的更新网址设置了反爬虫的CDN

    • 这个反爬虫CDN会导致自动更新失败

    • 自动更新失败导致整个程序无法使用

我认为这个是很好的工具,堪称代理界瑞士军刀,不输netcat,但是软件稳定性及开源精神方面有待加强。

穿透内网以后,就可以使用上面介绍的内网连接方法了,只要把端口映射出来就好。

内网穿透还有一个好处,比如你直接搭建PPTP服务器,如果你的公司或者子公司在境外的话,服务会非常不稳定,可以说基本不可用,但是如果是通过内网穿透来做,稳定性就会好很多。

结尾

以上就是连接公司内网享受福报的全部方法了,难免有错漏之处,也可能有些新技术没有来得及更新。 不过有机会的话,还请动手尝试一下。