> For the complete documentation index, see [llms.txt](https://blog.tsingjyujing.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://blog.tsingjyujing.com/tech/network/intranet.md).

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

## 简介

这篇文章主要介绍如何在家、或者在外出差的时候能够连回办公室的内网办公，享受福报。 本文是一个简介性质的文章，具体技术细节网上有很多博客，况且最近还兴起了用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](https://github.com/FelisCatus/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](https://www.v2ray.com/)

理论上说V-Project只是一套协议规范，核心是[V-Mess协议](https://www.v2ray.com/developer/protocols/vmess.html)。 但是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](https://github.com/TsingJyujing/aliyun-ddns-client)，欢迎Fork。

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

有了服务器，内网穿透的方案大致有（花生壳以外）：

* Ngrok
* GoProxy

Ngrok的教程网上一搜一大把，GoProxy的资料少一点，参考[官方文档中内网穿透一章](https://snail.gitee.io/proxy/manual/zh/#/?id=_4%e5%86%85%e7%bd%91%e7%a9%bf%e9%80%8f)。

这里我需要评价GoProxy几句：

1. 这是个开源软件，但是源代码并不是及时更新的，总是晚于二进制包慢一点更新，而且似乎也并不全，所以并不是真正开源。
2. 曾经在7.8版本的时候我遇到过：
   * GoProxy要自动检查更新
   * 但是GoProxy的更新网址设置了反爬虫的CDN
   * 这个反爬虫CDN会导致自动更新失败
   * 自动更新失败导致整个程序无法使用

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

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

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

## 结尾

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