快速SSH代理或路由?


1

我有使用nginx代理proxy_pass指令的经验。我可以使用SSH做类似的事情吗?

这是我的机器及其主机名的家庭网络:

         <the Internet>
               |
            [router]
               |
 [kenmore]---[park]---[chiswick]

park该如何配置,以便每当它获得SSH连接时,它都会检查主机名并连接到其中一个kenmorechiswick相应地连接?我知道如何为提供HTTP服务而不是SSH。


您是否正在寻找NFS配置解决方案?
Ben Plont

如果我理解正确,则NFS是一种文件系统协议,而我希望将SSH放入防火墙后面的盒子中。
瑞安·肯尼迪

NFS允许在本地文件系统安装点上安装远程目录层次结构。如果配置了kenmore和chiswick,则可以使用park将指定的目录挂载到通常从ssh发出的客户端上。
Ben Plont

“根据”是什么意思?请求何时传递给chiswick,何时传递给kenmore?
MariusMatutiae

@MariusMatutiae如果有要求ryan@chiswick,它将传递给chiswick。同样适用于kenmore
瑞安·肯尼迪

Answers:


1

如果您具有根权利@ park,则可以使用iptables-重定向:

  • ssh -p 2201 user@park →重定向到kenmore:22
  • ssh -p 2202 user@park →重定向到奇斯威克:22

iptables -t nat -A PREROUTING-$ PARK_IP -p tcp --dport 2201 -j DNAT --to-destination 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代码段,我会很感兴趣。)


1

如果您具有kenmore,park和chiswick上的用户访问权限,最简单的解决方案是在〜/ .ssh / authorized_keys中使用SSH密钥和命令。

为了简单起见,假设您在所有三台计算机上都有一个名为的用户ryan

在公园上,创建两个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 / authorized_keys中

如果现在使用任何一个密钥文件kenmore.rsachiswick.rsa)登录到停放状态,您都会看到提示输入密码的提示-这应该是kenmore或chiswick的SSH提示符,具体取决于您使用的密钥文件。


这将要求在要从其中进行SSH的所有计算机上更新配置文件,这不理想(例如,当我从手机进行SSH且对配置没有太多控制权时)。聪明的主意!
瑞安·肯尼迪

0

如果我正确理解您的要求,我相信那是不可能的。

当您提供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解析为park的IP,但是一旦进入内部,便park知道该kenmore第二SSH 的真实IP )

  • 在内部运行诸如GateOne之类的内容park并通过HTTP 对其进行隧道传输,并park在内部使用一个Jumphost /网关连接到您需要的SSH终端。


0

这是不寻常的配置,因为它替代了可以通过10美元的开关实现的功能。但是,当然,如果10美元的交换机可以做到这一点,那么一台pc机就可以做到。必须有数不胜数的方法来做到这一点,这只是一个简单的方法。

让我们假设您的路由器提供的地址在192.168.1.21-50范围内,让我们将eth0 park的接口称为路由器,将eth1的kenmore和eth2的名称称为chiswick。

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)在公园:首先,让我们允许IPv4转发:作为sudo编辑/etc/sysctl.conf并更改此行

 #net.ipv4.ip_forward=0

 net.ipv4.ip_forward=1

保存文件,发出命令:

 sudo sysctl -p

5)其次,在停放区上,让我们将以下两条路由添加到路由表中:

 sudo route add -host 192.168.1.5 dev eth1
 sudo route add -host 192.168.1.10 dev eth2

现在你很好。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.