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

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

  •  1
     
  •   iriddle911 · 275 天前 · 3940 次点击
    这是一个创建于 275 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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