将 RouterOS 设置成家庭内网 SSH 跳板 作者: A diligent City lion 时间: 2020-05-08 分类: ROS 评论 最近又开始了异地工作和生活, 对我来说能随时管理家庭内网又成了比较重要的事。 (否则就浪费了近 100mbps 的上行?) 内网部分设备开启了 SSH 服务, 常见的方案就是利用路由器做“跳板”, 会比直接 dst-nat 到特定的 SSH 端口要“相对”更安全。 我使用的是 RouterOS (下称 ROS ), 下面来看看如何配置—— 首先当然是准备公钥登录。 我们希望为跳板机使用独立的密钥对, 假设你已将其生成对并安全地存放于本地 `~/.ssh/id_rsa_bastion `。 请将其通过 WebFig 或 Winbox 上传至 ROS 存储区。 自 6.31rc10 之后 ROS 终于支持了 RSA 密钥, 因此建议放弃 DSA 并至少使用 RSA 2048 强度。 然后确保你在 ROS 开启了 SSH 服务并提升了安全要求: ``` /ip service enable ssh /ip ssh set strong-crypto=yes ``` 当然,很重要地, 请别忘了允许 SSH 转发: 需注意的是若之前曾将此项设为 yes 的话, 则之前某次 ROS 版本升级曾将其改为 remote, 这是很多人(包括我)一开始失败的原因。 具体配置项含义请参考官网。 ``` /ip ssh set forwarding-enabled=local ``` 现在可以先用现有账号 SSH 尝试登录试试。 若成功, 我们继续为跳板机新建一个仅有 SSH 权限的用户组, 如名叫 ssh_bastion : ``` /user group add name="ssh_bastion" policy=ssh,!local,!telnet,!ftp,!reboot,!read,!write,!policy,!test,!winbox,!password,!web,!sniff,!sensitive,!api,!romon,!dude,!tikapp /user add ``` 跟着交互式命令行我们增加一个用户,如 joe_black , 将其加入刚建立的 ssh_bastion 组, 并为其导入之前已上传的公钥: ``` /user ssh-keys import public-key-file=id_rsa_ehome.pub user=chappell ``` 最后我们修改 ~/.ssh/config 配置: ``` Host 1.home HostName 1.0.0.1 Host 2.home HostName 1.0.0.2 Host *.home ProxyJump bastion ForwardAgent no IdentityFile ~/.ssh/id_ed25519_home Host home.bastion HostName ddns.example.tld User joe_black IdentityFile ~/.ssh/id_rsa_bastion Host * PubkeyAuthentication yes ``` 重新进行连接测试: ``` ssh 1.home -vvv ``` ROS 的 SSH 服务和 User 权限还可以增加 IP 段限制, 比如可以限定仅接受来自某些公网 IP 的访问来提升安全, 但终究仍让人觉得不够强大。