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

如何根据 LAN/外网环境,切换 SSH config 内的服务器地址

  •  
  •   dangyuluo · 2018-09-28 01:36:47 +08:00 · 995 次点击
    这是一个创建于 433 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前的需求如下:

    家里有一台路由器,简称 R,能够获得一个公网 IP,假设为 128.128.128.128 。路由器下辖局域网段 10.0.0.1/24。

    局域网内有一个 SSH 服务,IP:Port 10.0.0.5:22,在路由器上做了个映射 WAN22 => 10.0.0.5:22,这样我在公司就可以连接了。通过配置 ~/.ssh.config:

    Host home
        HostName home.mydomain.com (指向 128.128.128.128 )
        IdentityFile ~/.ssh/certs/home
        IdentitiesOnly yes
    
    

    我实现了在外网和内网下均可以使用ssh home进行连接。当我在外时,packet 经由路由器转发,再到达 SSH 服务器是很合理的。但当我回到家,还继续这么连接的话,数据会在路由器上绕一圈,完全没有办法利用内网之间的优势。虽然速度也很快,但是没有达到内网之间的理论速度,能明显发现路由器负载上升。

    最关键的问题是,我比较懒,不想在~/.ssh/config里建立两个连接,因此想问一下有没有合理的解决方案?我想 DNS override 可能是一种,但是估计缓存的问题不好解决。

    8 回复  |  直到 2018-09-28 12:09:48 +08:00
        1
    cnnblike   2018-09-28 01:58:32 +08:00
    我试过用 dnsmasq 劫持,感觉怪怪的。也不是说不能用,就是有时候 ssh 不上要排查的东西就又多了一条,略微有点智障
        2
    liwufan   2018-09-28 02:15:57 +08:00   ♥ 2
    我有三个点子:
    1.公网 dns 服务器可以根据不同 IP 段请求给出不同答案。
    2.内网的网关上配置 dnsmasq,adress=/domain/ip
    3.ssh/config ProxyCommand $HOME/.ssh/selecthost.sh %h %p 指向脚本,脚本先 ping 10.0.0.5。有就 ssh 内网 ip,没有就 ssh 域名
        3
    msg7086   2018-09-28 03:41:55 +08:00
    我们是用 DNS 劫持,内网劫持到内网地址。

    @liwufan 3. ping 不能保证对方是同一台服务器。
        4
    hsheng   2018-09-28 06:50:51 +08:00 via Android
    内网机器直接添加 host ?
        5
    laucenmi   2018-09-28 08:29:01 +08:00 via Android
    有域名会方便很多
        6
    yingfengi   2018-09-28 08:36:42 +08:00 via Android
    直接访问公网地址,网关做双向地址转换
        7
    zjb861107   2018-09-28 11:52:36 +08:00
    学习了!
        8
    ysc3839   2018-09-28 12:09:48 +08:00 via Android
    DNS 应该没有缓存的问题,网络环境改变的话操作系统应该会清除缓存的。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1438 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 25ms · UTC 17:12 · PVG 01:12 · LAX 09:12 · JFK 12:12
    ♥ Do have faith in what you're doing.