V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
sudoy
V2EX  ›  问与答

请问有什么工具可以把内网机器作为 API 服务器?

  •  
  •   sudoy · 2021-06-01 09:37:00 +08:00 · 2896 次点击
    这是一个创建于 1031 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我们中国办公室用的是国际专线+固定 IP,客户提供 Rest API, 只接受中国办公室的 IP 发送请求。而中国办公室的服务器(其实就是一台 24 小时运行的普通电脑)并没有外网端口映射,是跟普通电脑一样没有直接的公网 IP。 现在要做一个软件,我们美国办公室可以通过客户端访问客户数据。

    目前我只能用 Slack 提供的 RTM API 进行中转:也就是美国的同事加入 slack 频道 => 输入订单号码 => 中国服务器收到 Slack message, 然后调用客户 API,返回订单搜索结果 => 通过 Slack API 将 message 传回到 Slack 频道。

    问题: 现在想做成 web app 部署在 Heroku 上, 请问各位老哥有什么工具或者服务可以从 Heroku 那里 直接发送 request 请求到我们内网的 API ?这样的话我们就不用 slack 客户端了,拓展起来也灵活些。先行谢过!

    以下方案已排除,不考虑:

    ❌ 租一台有公网 IP 的服务器,让客户将这台服务器加入白名单。

    ❌ 把中国办公室的固定 IP 映射到服务器上。

    第 1 条附言  ·  2021-06-01 14:55:22 +08:00
    感谢大伙回复和帮助,目前已找到解决方案。可选方案如下:

    ⭐ frp: https://github.com/fatedier/frp
    ⭐ ngrok: https://ngrok.com/
    ⭐ Cloudflare Tunnel: 还未验证,正在探索中...
    ⭐ Zerotier 组网: http 貌似没弄好,作为备用选项,有空慢慢摸索。
    24 条回复    2021-06-03 12:16:12 +08:00
    sudoy
        1
    sudoy  
    OP
       2021-06-01 09:42:37 +08:00
    由于特殊的原因,以下方案已排除,暂不考虑:

    ❌ 租一台有公网 IP 的服务器,让客户将这台服务器加入白名单。

    ❌ 把中国办公室的固定 IP 映射到服务器上。
    icemanpro
        2
    icemanpro  
       2021-06-01 09:56:45 +08:00
    向日葵
    felixcode
        3
    felixcode  
       2021-06-01 09:58:23 +08:00   ❤️ 1
    租一台公网 IP 服务器,组 VPN 吧
    再在中国办公室上做一个 haproxy 或 nginx 转发
    loginv2
        4
    loginv2  
       2021-06-01 10:03:14 +08:00   ❤️ 1
    实时性不高的话,可以在中国办公室这边轮询 web app 那边的接口,然后获取要查询的东西 。谁有公网谁做服务器的思路
    Z1on
        5
    Z1on  
       2021-06-01 10:11:31 +08:00
    用 zerotier 组个网
    Vegetable
        6
    Vegetable  
       2021-06-01 10:55:46 +08:00
    组 VPN

    另:我怎么觉得,让对方白名单加一个 IP 并没有那么困难?
    manhere
        7
    manhere  
       2021-06-01 11:15:01 +08:00 via Android   ❤️ 1
    frp
    bg7dcw
        8
    bg7dcw  
       2021-06-01 11:43:24 +08:00   ❤️ 1
    同上 frp 做内网穿透。
    bg7dcw
        9
    bg7dcw  
       2021-06-01 11:45:08 +08:00
    美国办公室应该大概率有公网 ip 的哇,看看是不是你搞混了。
    国内专线也可能有公网 ip 。
    如果专线有公网 IP,只是服务器是内网 ip 的话,可以考虑端口映射。
    leavic
        10
    leavic  
       2021-06-01 13:16:08 +08:00   ❤️ 1
    cloudflare argo tunnel
    willamtang
        11
    willamtang  
       2021-06-01 13:21:46 +08:00
    国际专线不是指中国办公室到美国办公室有专线么?是的话,美中办公室内网能互通,都不需要 Heroku 。
    不是的话两个办公室弄一条 vpn tunnel,这样就能直接访问了。不用给公网地址。
    非要用 heroku 的,看看 private-space-peering 能行不。
    sudoy
        12
    sudoy  
    OP
       2021-06-01 13:36:15 +08:00
    感谢大家回复!
    @manhere:frp 可以的,谢谢!不知道有没有 python 版的
    @leavic 请问你说的是 Cloudflare Tunnel 吗?
    sudoy
        13
    sudoy  
    OP
       2021-06-01 13:40:23 +08:00
    @willamtang 并没有跟美国办公室连接,美国办公室时普通的 AT&T 宽带。我们国内办公室去中国电信开通的那个宽带业务叫“国际专线”,带有固定 IP,然后访问国外网站的速度比普通宽带要快一些,估计是中转的节点要少。
    willamtang
        14
    willamtang  
       2021-06-01 13:52:22 +08:00   ❤️ 1
    有固定 ip 应该是公网 ip 吧,在路由或者防火墙上跟美国办公室建个 tunnel 感觉是最省事的。
    sudoy
        15
    sudoy  
    OP
       2021-06-01 13:58:24 +08:00
    @willamtang 是的,在组网中,之前用 zerotier,但是 zerotier 用 tcp udp 还可以,http 没成功过,所以想找别的代替
    yufeng0681
        16
    yufeng0681  
       2021-06-01 14:43:25 +08:00   ❤️ 1
    中国办公室其实有公网 IP (专线的固定 IP 就是)
    1 、中国办公室买个路由器 具备 内网映射功能 (公网 8888 端口映射到内网 IP1:80 端口上)
    2 、办公室内弄一台机器( IP1 )安装 Nginx,做反向代理配置
    3 、配置,接收 http://xxx/yyy 的请求,反向代理到 http://客户 IP:port

    ---访问流程----
    1 、美国办公室访问 http://固定 IP:8888/yyy
    2 、路由器转发到 Nginx
    3 、Nginx 代理到客户服务器
    sudoy
        17
    sudoy  
    OP
       2021-06-01 14:50:09 +08:00
    @yufeng0681 谢谢回复,不过目前暂不考虑折腾内网端口映射,想用类似 frp 或者 ngrok 的工具
    joesonw
        18
    joesonw  
       2021-06-01 15:51:05 +08:00 via iPhone
    wireguard 组 vpn 呗,美国服务器做住,中国连过去,然后两边访问是对等的。
    x66
        19
    x66  
       2021-06-01 17:48:18 +08:00
    美国办公室能访问到中国办公室的服务器吗?如果可以的话,在中国办公室的服务器上搭建一个代理服务器?通过代理请求 API
    sudoy
        20
    sudoy  
    OP
       2021-06-01 18:19:33 +08:00
    @x66 访问不到的,zerotier 组网以后能用 RDP,但是 http 没响应
    wzwb
        21
    wzwb  
       2021-06-01 19:36:56 +08:00 via Android
    可以问一下这个图是怎么作出来的吗,有啥工具还是自己画的,感觉很好看😂
    yufeng0681
        22
    yufeng0681  
       2021-06-02 09:50:34 +08:00
    你是个商业行为,就别折腾不成熟的开源软件。
    那些号称自己能把两地弄成一个局域网的,都需要用到公网机器做通信协商,免费的总会出各种异常(有限服务,让你断几次很正常)
    你打通了流程,然后中间偶发性的停止服务了,你找谁去? 美国分公司不投诉你,投诉谁? 你提供的解决方案这么脆弱,自己还没法控制住服务质量。

    不考虑的恰恰都是靠谱方案,因为那些都是付费才能有的服务。
    sudoy
        23
    sudoy  
    OP
       2021-06-03 12:13:42 +08:00
    @wzwb 用 Adobe Illustrator 画的
    sudoy
        24
    sudoy  
    OP
       2021-06-03 12:16:12 +08:00
    @yufeng0681 这个属于辅助工具,访问量没那么大的。而且排除的方案都是有特殊的原因才排除,并非常规开发。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3246 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 11:43 · PVG 19:43 · LAX 04:43 · JFK 07:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.