V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iriddle911
V2EX  ›  互联网

一个域名如何使得内网访问走内网,外网访问走穿透

  •  1
     
  •   iriddle911 · 2019-01-21 08:43:27 +08:00 · 10951 次点击
    这是一个创建于 1894 天前的主题,其中的信息可能已经有所发展或是发生改变。

    嗯...在公司内网某个机子部署了个服务,现在在内网访问时通过 10.0.38.123 这样的地址访问,外网访问是跑了个 FRP 穿透服务,通过 abc.com:8088 这样访问的。

    因为是给办公室几十个人用的,请问有办法让用户在内网访问时,也能输入域名走局域网流量么。 这样不用让用户区分好几个地址,内外网使用时速度也能更高效..

    ps.我们公司上网是得手动设置 ip dns 这些。所以是不是我没法再自己再部署 DNS 了

    42 条回复    2019-06-17 20:41:54 +08:00
    alvin666
        1
    alvin666  
       2019-01-21 08:45:37 +08:00 via Android
    你这根本不是解析的问题啊,你意思内网人家用 abc.com ,外网用 abc.com:8888?
    这样和你现在这种访问有什么区别
    shengyu
        2
    shengyu  
       2019-01-21 08:46:36 +08:00 via iPhone
    自建 dns 吧 转发 dns 解析到现在使用的 dns
    fetich
        3
    fetich  
       2019-01-21 08:48:54 +08:00
    NAT Loopback
    jiaxin1121
        4
    jiaxin1121  
       2019-01-21 08:49:09 +08:00
    修改 host
    vyronlee
        5
    vyronlee  
       2019-01-21 08:52:27 +08:00 via iPhone
    zerotier
    dengshuang
        6
    dengshuang  
       2019-01-21 08:52:49 +08:00 via Android
    dns 欺骗
    iriddle911
        7
    iriddle911  
    OP
       2019-01-21 08:55:55 +08:00
    @alvin666 没没 我现在内网是走局域网 ip 的 外网是 abc.com:8088 这个地址,现在想实现内网访问 abc.com:8088 时走不同流量,都能进入这个服务。这个意思。
    BOYPT
        8
    BOYPT  
       2019-01-21 08:58:25 +08:00
    域名指向个外网网页,载入时候 jQuery 尝试加载内网地址,超时就跳转你的业务外网地址,加载成功就跳转业务内网地址。
    CallMeReznov
        9
    CallMeReznov  
       2019-01-21 08:59:02 +08:00
    内网机器全部 DNS 指向你的路由器 然后在路由器上写一条你自定义的 DNS 指向你的 IP 即可
    iriddle911
        10
    iriddle911  
    OP
       2019-01-21 09:02:25 +08:00
    @CallMeReznov 老哥 您是说自己做 DNS 设置么。我目前暂时没有权限动公司的 DNS 服务器....
    chinvo
        11
    chinvo  
       2019-01-21 09:04:16 +08:00 via iPhone
    公司内部部署 DNS 服务器,全公司机器统一设置内网 DNS (比如通过加域
    iriddle911
        12
    iriddle911  
    OP
       2019-01-21 09:05:04 +08:00
    @BOYPT 嗯嗯嗯 老哥您这也是个很好的解决办法了。不过我还有移动端.....移动端是填写服务地址进入 app 的,这样就不好搞了吧
    CallMeReznov
        13
    CallMeReznov  
       2019-01-21 09:05:16 +08:00
    @iriddle911 #10 私架个 WIFI 然后在 WIFI 里的自定义 DNS 里添加一个记录指向你的 IP
    iriddle911
        14
    iriddle911  
    OP
       2019-01-21 09:09:20 +08:00
    再给大家说下 公司 DNS 我暂时没法动。网管也不给改.......
    iriddle911
        15
    iriddle911  
    OP
       2019-01-21 09:09:53 +08:00
    @CallMeReznov emm 那台式机是不是就没办法了
    shuang
        16
    shuang  
       2019-01-21 09:16:10 +08:00
    dns 动不了,那就搞个 http 代理吧,通过代理改映射。每个人在自己的终端上设置下代理 ip 及端口
    35korea
        17
    35korea  
       2019-01-21 09:19:24 +08:00 via Android
    启动时。用户自己选,内网,还是外网
    35korea
        18
    35korea  
       2019-01-21 09:22:22 +08:00 via Android
    有个 cdn 软件 fikker 解析时有个轮询功能,不知道能否利用
    wweir
        19
    wweir  
       2019-01-21 09:24:38 +08:00 via Android
    出个损招,首页加串代码,尝试内网地址地址。
    成功就来个 302,不成功就 pass。

    缺点是域名始终没法统一
    C2G
        20
    C2G  
       2019-01-21 09:28:21 +08:00 via Android
    手动设置 IP 和你手动设置 dns 有什么关系...找个路由器,搭建 dnsmasq,上层路由填你们公司原来那个,在 dnsmasq 里面设置 abc.com→内网地址,然后把电脑 dns 改成路由器 IP,这种方法即使你们公司只允许访问原有的 dns 也没有问题。
    alvin666
        21
    alvin666  
       2019-01-21 09:29:32 +08:00 via Android
    楼上尝试的,timeout 至少要两三秒吧,或者自己手动 500ms 的 timeout ?那也难受

    我建议就是反代服务器也开在 80,然后 dns 内网外网都设置上,浏览器会逐个尝试,选择能通的,亲测还挺快
    aru
        22
    aru  
       2019-01-21 09:31:52 +08:00
    web 服务器可以通过用户请求的 header 中的 X-Forwarded-For 和 X-Real-IP 来获取用户真实 IP。
    如果你们公司的出口 IP 是固定地址,那么访问 abc.com:8088 直接跳转到内网访问地址即可( nginx 或应用中判断都行)
    Sylv
        23
    Sylv  
       2019-01-21 09:38:55 +08:00 via iPhone
    可以通过内网路由配置 dnsmasq 实现:
    address=/abc.com/10.0.38.123
    zwh2698
        24
    zwh2698  
       2019-01-21 09:42:26 +08:00 via Android
    配置个路由简单方便
    zwh2698
        25
    zwh2698  
       2019-01-21 09:45:16 +08:00 via Android
    看错忽略上一条
    wps353
        26
    wps353  
       2019-01-21 09:45:18 +08:00
    内网路由器 DNS 劫持
    zhouzm
        27
    zhouzm  
       2019-01-21 09:54:45 +08:00
    正好之前做过,说一下我的办法:
    1. 公司 dns 服务器不让动,你可以在服务器上自己建一个,推荐 overture,用 docker 建的话很方便。hosts_sample 里直接加内网 ip 对外网域名就可以,上级 dns 服务器填公司 dns 服务器。办公室人员电脑 dns 设置为你建的服务器。
    2. 在服务器上用 nginx 做反向代理,把 abc.com:8088 反代到 内网 ip:内网端口,另外配合三级域名,一个 8088 端口可以提供多个不同的服务。

    这样就可以实现内外网都访问 abc.com:8088,外网走外网流量,内网走内网流量
    oott123
        28
    oott123  
       2019-01-21 09:54:56 +08:00 via Android
    有个比较离奇的办法:像 21 楼说的那样,你自己的域名内网、外网 ip 都解析(两条记录,同等优先级);同时在转发服务器上拦截来自内网 ip 的请求(防火墙,直接 drop 掉),这样也许好使…
    zjb861107
        29
    zjb861107  
       2019-01-21 10:02:59 +08:00
    做一个导航页挂在外网,然后一个外网入口、一个内网入口——解决记好几个地址的困扰。
    或者,公司的出口 IP 一般是固定的几个,在程序上判断,然后做个 301 跳转
    iriddle911
        30
    iriddle911  
    OP
       2019-01-21 10:05:23 +08:00
    @zhouzm
    @aru
    感谢两位回复,让 nginx 判断访问 ip 应该能行的通。我去试一下。
    dot2017
        31
    dot2017  
       2019-01-21 10:06:27 +08:00
    内网放个 2 级 dns 不就好了。。。简单的问题变复杂
    aru
        32
    aru  
       2019-01-21 10:07:28 +08:00
    @iriddle911
    要设置 realip,否则你拿不到真实 IP 地址
    http://nginx.org/en/docs/http/ngx_http_realip_module.html
    mhycy
        33
    mhycy  
       2019-01-21 10:20:40 +08:00
    FRP+Nginx 反代,域名解析到外网 IP
    内网使用 ROS 之类的路由,劫持全网 DNS 请求,由 ROS 的 DNS 提供内网地址
    defunct9
        34
    defunct9  
       2019-01-21 15:32:58 +08:00
    dnsmasq
    liuxyon
        35
    liuxyon  
       2019-01-21 16:36:44 +08:00
    我用 bgp,自己 ip 内部直连
    hquu
        36
    hquu  
       2019-01-21 18:42:20 +08:00 via iPhone
    内网直接改 host 文件 或者改路由 iptables
    zhouyut001
        37
    zhouyut001  
       2019-01-21 20:00:13 +08:00
    内网 dnsmasq 指向内网 IP,外网直接访问
    mingl0280
        38
    mingl0280  
       2019-01-22 06:39:09 +08:00
    内网的 dns 服务器指向内网 ip 就行了,实在没有 dns 服务器访问权限的话改 hosts 也行,我用这个手段避免了批量部署下去的 Ubuntu 和 debian 的更新流量跑到外网去……内网上架了个 dns,架了个 apache2 的源服务器,更新直接请求内网服务器就行了。
    iriddle911
        40
    iriddle911  
    OP
       2019-01-23 10:40:01 +08:00   ❤️ 1
    结贴了~最终使用 nginx 根据访问 ip 分配不同 url 解决
    谢谢各位的热心帮助~~~
    haiyulee
        41
    haiyulee  
       2019-04-24 13:14:59 +08:00 via Android
    楼主,我也想做相同的操作,有几个问题不明白
    不同的 url 具体是怎么写的?
    服务器是只在内网环境有一台吧?
    域名解析出来都是指向反代服务器吗?
    还有很多具体的问题,能分享下 nginx 的配置文件吗?
    iriddle911
        42
    iriddle911  
    OP
       2019-06-17 20:41:54 +08:00
    @haiyulee
    1. 在 nginx 里配置,就是根据来源 ip 分配不同的域名,这个你搜索一下,网上挺多;
    2. 这样操作需要有一台公网服务器,阿里云什么的;
    3. 解析是这样,访问 www.abc.com ,此时解析至公网的反代服务器,然后这时由 nginx 判断,如果来源是内网,那么直接跳转内网地址,如果来源是非内网,那么就走跳转的服务。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5250 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 05:43 · PVG 13:43 · LAX 22:43 · JFK 01:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.