我有一个动态 OpenSSH 隧道运行如下:
ssh -N -D '*:1080' [email protected]
(OpenSSH_5.3p1 Debian-3,OpenSSL 0.9.8n 2010 年 3 月 24 日)
它可以完美运行几个小时或几天,但开始随机断开连接(不是 100%,只有一些),导致:
channel 1019: open failed: administratively prohibited: open failed
我用谷歌搜索了一下,但除了这条由于服务器配置错误而导致完全拒绝隧道的消息之外什么也没找到,这里的隧道工作了几个小时才丢弃了一些请求。
任何想法?
答案1
当我尝试将端口转发到无法到达的目的地时,我看到了相同的消息:
ssh example.com -L 1337:example.invalid:80
telnet localhost 1337
[电子邮件保护]:~$ 频道 3:打开失败:管理禁止:打开失败
答案2
“管理禁止”也是 ICMP 控制消息之一。SSH 服务器和隧道目的地之间的路由器是否可能发送此消息?
如果可以嗅探,一个简单的 pcap 过滤器就icmp
可以显示所有的 ICMP 流量。
答案3
authorized_keys
我在使用时遇到了同样的问题permitopen
。在服务器端,/var/log/auth.log 包含:
Received request to connect to host 127.0.0.1 port 10001, but the request was denied.
我用它autossh
创建隧道,需要两个端口:一个用于连接(10000),一个用于监控(10001)。问题出在监控端口上。
在我的authorized_keys中我有这个:
command="/home/user/tunnel",no-X11-forwarding,no-pty,permitopen="localhost:10000",permitopen="localhost:10001" ssh-rsa AAAA
我通过将localhost
实例替换为来解决这个问题127.0.0.1
答案4
连接丢失的原因可能是防火墙超载或配置过于严格,无法清理位于 SSH 连接目标和转发端口的最终目标之间的空闲连接。
一旦防火墙判断某个连接空闲的时间足够长,它可能会从其连接状态表中删除该连接信息。如果连接的任一端点在此之后尝试传递任何流量,防火墙将拒绝该连接(代表预期目的地),因为您显然试图使用现有连接,但防火墙不再具有该连接的状态跟踪信息。因此,防火墙会拒绝数据包并显示 ICMP 错误消息,因此“管理上禁止”。