Skip to content

HOWTO : how to access my office OA system from home

CaiShu edited this page May 12, 2024 · 1 revision

问题描述:

我在办公室电脑可以访问公司内部的OA系统,OA系统使用内部域名访问 https://oa.abc-company.internal 。怎样配置ztm使得我在家里可以访问OA?

方法:

综述

这个方案和https://github.com/flomesh-io/ztm/wiki/HOWTO:-How-to-access-my-home-Linux-from-office-macOS-by-ztm%3F 有相似之处,但是差异主要在于这个场景使用的是https服务,而且使用域名访问。大多数使用域名访问的应用,比如OA,都会有CORS限制,并且通常都会有一些基于域名的自动跳转,比如SSO。这些因素导致不能简单的采用“端口映射”的方式。常见的方式是这样的:在应用侧部署一个socks代理,然后在客户端采用支持“Proxy DNS”的浏览器,比如firefox;然后把这个socks代理的端口使用ztm映射到客户端。拓扑是这样的:

拓扑

在办公室运行socks服务有很多方式,比如运行squid,但是这里有更简单的办法,ztm构建在pipy之上,pipy就支持socks协议,因此可以在办公室电脑用以下脚本启动一个最简单的socks代理:

var $target

pipy.listen(9090, $=>$
  .acceptSOCKS(
    function (req) {
      $target = `${req.domain}:${req.port}`
      println($target)
      return true
    }
  ).to($=>$
    .connect(() => $target)
  )
)

把这段脚本保存到一个文件中,比如socks.js,然后使用pipy运行就可以了(既可以使用Linux/Macos的term启动,也可以用windows cmd启动):

admin@ip-172-31-15-74:~$ pipy socks.js
2024-05-12 11:53:34.736 [INF] [listener] Listening on TCP port 9090 at 0.0.0.0
2024-05-12 11:53:34.736 [INF] [worker] Thread 0 started

所以,整个的过程大概如下:

  1. 在公有云启动一个ztm hub。过程可以参考 https://github.com/flomesh-io/ztm/wiki/HOWTO:-How-to-access-my-home-Linux-from-office-macOS-by-ztm%3F#deploy-the-ztm-hub

  2. 在办公电脑部署和启动一个ztm agent,我们称为agent-office。过程可以参考 https://github.com/flomesh-io/ztm/wiki/HOWTO:-How-to-access-my-home-Linux-from-office-macOS-by-ztm%3F#join-the-mesh

  3. 在办公室电脑启动socks服务,监听在9090端口

  4. 在办公室电脑agent-office配置socks服务,过程可以参考 https://github.com/flomesh-io/ztm/wiki/HOWTO:-How-to-access-my-home-Linux-from-office-macOS-by-ztm%3F#expose-your-first-service 。验证结果:

admin@ip-172-31-15-74:~$ curl -s localhost:7777/api/meshes/home-office/endpoints/498135ce-8342-4dca-a03e-92e3aa23d03a/services | jq
[
  {
    "name": "9090",
    "protocol": "tcp",
    "endpoints": [
      {
        "id": "498135ce-8342-4dca-a03e-92e3aa23d03a",
        "name": "agent-office",
        "isLocal": true
      }
    ],
    "isDiscovered": true,
    "isLocal": true,
    "host": "localhost",
    "port": 9090
  }
]
  1. 在家里电脑启动一个ztm agent,我们称为agent-home。过程可以参考 https://github.com/flomesh-io/ztm/wiki/HOWTO:-How-to-access-my-home-Linux-from-office-macOS-by-ztm%3F#join-the-mesh

  2. 在agent-home配置ztm port 19090,指向agent-office的socks服务。配置过程可以参考 https://github.com/flomesh-io/ztm/wiki/HOWTO:-How-to-access-my-home-Linux-from-office-macOS-by-ztm%3F#create-local-port-for-accessing 。配置的结果如下:

caishu@caishu-macair4 ztm % curl -s localhost:7777/api/meshes/office-home/endpoints/7900b5a5-a744-4019-b7d7-2966e3d7a68d/ports | jq
[
  {
    "protocol": "tcp",
    "listen": {
      "ip": "0.0.0.0",
      "port": 18080
    },
    "target": {
      "endpoint": null,
      "service": "9090"
    },
    "open": true
  }
]
  1. 在家里电脑配置socks代理,比如我用firefox就是这样配置:
firefox socks proxy settings

这样完成配置后,在firefox输入 https://oa.abc-company.internal 就可以访问办公室里的OA系统了~