在家办公如何优雅的访问公司内网?

14,227 阅读4分钟
原文链接: akiya789.cn

情况说明:在公司无固定IP,不能做DDNS,也不能搭建VPN,更没有jumpserver的情况,面对肺炎疫情。在家办公我要如何远程开发远程调试?

当时计划是这样的,

  1. team viewer:公司不能直接连接,那我使用 team viewer 呗,但是!你让我用这玩意儿远程连接公司电脑写代码我是拒绝的,mac和windows键盘布局不一样,对我来说不够友好,而且开着ss的情况可能会出现商业行为检测!
  2. frp:利用frpc在公司部署内网穿透,自己使用vps做frps,在公司某台属于我的测试服务器上部署python开发环境,然后利用 vscoderemote ssh 功能远程开发调试就好了,但是也只能连终端服务器啊,我不可能把相关需要的web页面全代理出来,这个也不好使。
  3. nps:使用 比 frp 更为强大的工具 npsfrp 中有的功能 nps 有, frp 没有的他也有,而且 nps 还提供web远程管理功能,岂不美滋滋。依赖于 nps 提供的 socks5 我们可以达到类似 VPN 的效果,在家即可访问公司整个局域网。

什么是socks

摘自维基百科

SOCKS是一种网络传输协议,主要用于客户端与外网服务器之间通讯的中间传递。SOCKS是"SOCKetS"的缩写[1]。 当防火墙后的客户端要访问外部的服务器时,就跟SOCKS 代理服务器连接。这个代理服务器控制客户端访问外网的资格,允许的话,就将客户端的请求发往外部的服务器。 这个协议最初由David Koblas开发,而后由NEC的Ying-Da Lee将其扩展到版本4。最新协议是版本5,与前一版本相比,增加支持UDP、验证,以及IPv6

根据OSI模型,SOCKS是会话层的协议,位于表示层传输层之间。

废话不多说,直接进入正题。

部署nps

nps官方文档:ehang-io.github.io/nps/#/?id=n…

nps需要部署在你的拥有固定IP的外网服务器上,例如:阿里云ECS等。

  1. 下载最新版本与你同平台的server包(感谢golang的跨平台性):下载地址

    # wget https://github.com/ehang-io/nps/releases/download/v0.26.1/linux_amd64_server.tar.gz
    
  2. 解压包文件

    # mkdir -p /opt/nps
    # tar -zxvf linux_amd64_server.tar.gz -C /opt/nps
    # cd /opt/nps
    
  3. 修改配置文件

    # vim conf/nps.conf
    

    修改内容如下

    ...
    #HTTP(S) proxy port, no startup if empty
    http_proxy_ip=0.0.0.0
    http_proxy_port=8089
    # https_proxy_port=54443     # 由于我使用nginx做统一web代理,所以不需要他自己的https
    # https_just_proxy=false
    # #default https certificate setting
    # https_default_cert_file=conf/server.pem
    # https_default_key_file=conf/server.key
    
    ##bridge
    bridge_type=tcp    # 客户端与服务端连接方式kcp或tcp
    bridge_port=10181  # 服务端客户端通信端口
    bridge_ip=0.0.0.0
    
    # Public password, which clients can use to connect to the server
    # After the connection, the server will be able to open relevant ports and parse related domain names according to its own configuration file.
    public_vkey=akiya   # 客户端以配置文件模式启动时的密钥,设置为空表示关闭客户端配置文件连接模式
    ...
    #web
    web_host=a.o.com
    web_username=akiya              # web界面管理账号
    web_password=akiyapwd           # web界面管理密码
    web_port = 58080                # web管理端口
    web_ip=0.0.0.0
    web_base_url=
    web_open_ssl=false
    web_cert_file=conf/server.pem
    web_key_file=conf/server.key
    
  4. 安装nps

    # ./nps install
    
  5. 启动

    # nps start
    
  6. 与nginx配合使用: nps与nginx配合

启动完成后即可通过浏览器访问。

部署npc

npc客户端部署在待访问的内网中任意服务器,当前服务器需要可以访问内网资源与能够连接公网。

  1. 下载最新版本与你同平台的client包(感谢作者开源如此美好的软件):下载地址

    # wget https://github.com/ehang-io/nps/releases/download/v0.26.1/linux_amd64_client.tar.gz
    
  2. 解压包文件

    # mkdir -p /opt/nps
    # tar -zxvf linux_amd64_client.tar.gz -C /opt/nps
    # cd /opt/nps
    
  3. 修改配置文件

    # vim conf/npc.conf
    

    修改内容如下

    [common]
    server_addr=nps.akiya.com:10181   # 服务端ip:port
    conn_type=tcp                     # 与服务端通信模式(tcp或kcp)
    vkey=akiya                        # 服务端配置文件中的密钥(非web)
    auto_reconnection=true            # 断线重连
    crypt=true                        # 是否加密传输(true或false或忽略)
    compress=true                     # 是否压缩传输(true或false或忽略)
    
    # ssh 私密连接
    [ssh_secret]
    mode=secret
    password=akiya
    target_addr=192.168.1.142:22
    
  4. 注册到系统服务(开机启动、守护进程)

    # ./npc install -config=/config/npc.conf)
    
  5. 启动

    # npc start
    

配置socks5

npsnpc 启动完成后,访问 nps web 页面可以看到客户端列表中已有我们刚添加的 npc

然后点击编辑 按钮添加basic 认证

保存后,再在 socks5代理 中添加一个新的 socks5 ID填写为你 npc ID,端口为你当前 socks5 访问端口。

连接socks5

以上流程都完成后我们就可以使用客户端工具通过 socks5 访问目标内网了。

  1. 下载proxifier
  2. 注册码:

    • L6Z8A-XY2J4-BTZ3P-ZZ7DF-A2Q9C(Portable Edition) # 免安装版本

    • 5EZ8G-C3WL5-B56YG-SCXM9-6QZAP(Standard Edition) # 安装版本

    • P427L-9Y552-5433E-8DSR3-58Z68(MAC) # mac版本

  3. 添加到 proxifier

  1. 愉快的连接内网,现在就可以在浏览器或者终端中愉快的连接内网服务了


标题:在家办公如何优雅的访问公司内网?
作者:akiya789
地址:akiya789.cn/articles/20…