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

2018-09-28 01:36:47 +08:00
 dangyuluo

目前的需求如下:

家里有一台路由器,简称 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 可能是一种,但是估计缓存的问题不好解决。

1564 次点击
所在节点    问与答
8 条回复
cnnblike
2018-09-28 01:58:32 +08:00
我试过用 dnsmasq 劫持,感觉怪怪的。也不是说不能用,就是有时候 ssh 不上要排查的东西就又多了一条,略微有点智障
liwufan
2018-09-28 02:15:57 +08:00
我有三个点子:
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 域名
msg7086
2018-09-28 03:41:55 +08:00
我们是用 DNS 劫持,内网劫持到内网地址。

@liwufan 3. ping 不能保证对方是同一台服务器。
hsheng
2018-09-28 06:50:51 +08:00
内网机器直接添加 host ?
laucenmi
2018-09-28 08:29:01 +08:00
有域名会方便很多
yingfengi
2018-09-28 08:36:42 +08:00
直接访问公网地址,网关做双向地址转换
zjb861107
2018-09-28 11:52:36 +08:00
学习了!
ysc3839
2018-09-28 12:09:48 +08:00
DNS 应该没有缓存的问题,网络环境改变的话操作系统应该会清除缓存的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/493377

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX