我有使用 nginx 指令代理网站的经验proxy_pass
。我可以用 SSH 做类似的事情吗?
这是我的家庭网络以及我的机器及其主机名:
<the Internet>
|
[router]
|
[kenmore]---[park]---[chiswick]
我该如何配置park
,以便每当它获得 SSH 连接时,它都会检查主机名并相应地连接到或kenmore
?chiswick
我知道如何为 HTTP 服务,但不知道如何为 SSH 服务。
答案1
如果你有 root 权限@park,你可以使用 iptables - 重定向:
ssh -p 2201 user@park
→ 重定向至 kenmore:22ssh -p 2202 user@park
→ 重定向至 chiswick:22
iptables -t nat -A PREROUTING -$PARK_IP -p tcp --dport 2201 -j DNAT --到目的地 kenmore:22
iptables -t nat -A PREROUTING -$PARK_IP -p tcp --dport 2202 -j DNAT --到目的地 chiswick:22
iptables -t nat -A POSTROUTING -j MASQUERADE
(如果有人有不带 NAT 的 iptables-snippet 我会感兴趣。)
答案2
如果你有 kenmore、park 和 chiswick 的用户访问权限,最简单的解决方案就是使用 SSH 密钥和命令〜/.ssh /授权密钥。
为简单起见,我们假设三台机器上都有一个名为的用户ryan
。
在 park 上创建两个 SSH 密钥对:
$ ssh-keygen -C kenmore -f kenmore.rsa
$ ssh-keygen -C chiswick -f chiswick.rsa
在kenmore.rsa.pub,在内容前加上前缀,如下所示:
command="ssh ryan@kenmore" ssh-rsa KEY_HERE
在chiswick.rsa.pub,在内容前加上前缀,如下所示:
command="ssh ryan@chiswick" ssh-rsa KEY_HERE
将 kenmore.rsa.pub 和 chiswick.rsa.pub 的全部内容附加到〜/.ssh /授权密钥在单独的行上。
如果您现在使用任一密钥文件登录 park(kenmore.rsa或者chiswick.rsa)您将注意到提示输入密码 - 这应该是 kenmore 或 chiswick 的 SSH 提示,取决于您使用的密钥文件。
答案3
如果我正确理解了您的要求,我认为这是不可能的。
当你提供 HTTP 服务时,客户端会执行主机的 DNS 查找,并向该主机发送 HTTP 请求,该请求包括请求标头中的原始主机名(从客户端的角度来看)。当请求到达服务器时,服务器能够根据传入的 IP 地址和/或客户端对主机名的看法来决定如何处理该请求。
另一方面,使用 SSH,一旦完成 DNS 查找,就只使用 IP 地址,而客户端用来解析该 IP 的主机名永远不会被服务器看到。
您可能需要考虑的其他一些选择 -
让多个 SSH 守护进程监听不同的端口,每个都重定向到不同的主机。在客户端,你可以像这样设置 ~/.ssh/config:
Host kenmore Port 2201 Host chiswick Port 2202
(这是假设它们都解析到首先命中的 IP
park
。)在你的客户端上,只需运行第二个 SSH,
park
就像第一个 SSH 的命令一样,例如ssh -t kenmore ssh kenmore
(假设从外部
kenmore
解析到的 IP,但是一旦进入内部就知道第二个 SSH 的真实 IP )park
park
kenmore
运行类似盖特一号并通过 HTTP建立
park
隧道,充当park
内部所需的 SSH 终端的跳转主机/网关。
答案4
这是一个不寻常的配置,因为它取代了 10 美元的交换机所能实现的功能。当然,如果 10 美元的交换机能做到这一点,更有甚者一台电脑就能做到。肯定有无数种方法可以做到,这只是其中一种简单的方法。
假设您的路由器提供的地址在 192.168.1.21-50 范围内,我们将 eth0 称为 park 与路由器的接口,将 eth1 与 kenmore 的接口称为 eth1,将 eth2 与 chiswick 的接口称为 eth2。
1)让 park 通过路由器的 DHCP 获取其 IP 地址。
2) 让我们为 kenmore 和 chiswick 指定静态 IP 地址。例如 kenmore 192.168.1.5 和 chiswick 192.168.1.10。请注意,这两者都超出了路由器使用的范围,因此不会发生冲突。
3) 根据 kenmore/chiswick 上的操作系统,您可能需要在其上设置路由表。在 Linux 中,您应该有
sudo route add default gw 192.168.1.1
在 Mac 上也是如此,但在 Windows 上我认为这是自动的。
4)在 park 上:首先,让我们允许 IPv4 转发:使用 sudo 编辑 /etc/sysctl.conf 并更改此行
#net.ipv4.ip_forward=0
到
net.ipv4.ip_forward=1
保存文件,发出命令:
sudo sysctl -p
5)其次,在park上,让我们将这两条路线添加到路由表中:
sudo route add -host 192.168.1.5 dev eth1
sudo route add -host 192.168.1.10 dev eth2
现在您就可以开始了。