AWS VPC NAT | ssh_exchange_identification:读取:连接被对等方重置

AWS VPC NAT | ssh_exchange_identification:读取:连接被对等方重置

我在连接 AWS VPC 子网时遇到严重的误导性错误。该错误确实发生在B->A连接中,而在A->B连接中没有发生,所以一开始我认为这是库错误。

它恰好是由 AWS 系统的“双层路由”和子网中的 NAT 实例引起的,该实例确实将数据包重定向到错误的网络通道,导致 ssh 断开连接。

下面是我的带有“案例研究”的帖子的副本,该帖子已从原始线程中删除:

据我所知,这甚至不是试图回答这个问题,所以我将其删除。如果您有一个单独的问题,请随时将其作为一个问题发布 |@michael-mrozek

就我而言:

正如@patrick建议的那样(ssh_exchange_identification:读取:连接被对等方重置):

客户端(子网B 172.16.3.76)
ssh 172.16.0.141 -vvv -p23
OpenSSH_6.6.1, OpenSSL 1.0.1f 6 Jan 2014
debug1: Reading configuration data /etc/ssh/ssh_config 
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to 172.16.0.141 [172.16.0.141] port 23.
debug1: Connection established.
debug1: permanently_set_uid: 0/0
debug1: identity file /root/.ssh/id_rsa type -1
debug1: identity file /root/.ssh/id_rsa-cert type -1
debug1: identity file /root/.ssh/id_dsa type -1
debug1: identity file /root/.ssh/id_dsa-cert type -1
debug1: identity file /root/.ssh/id_ecdsa type -1
debug1: identity file /root/.ssh/id_ecdsa-cert type -1
debug1: identity file /root/.ssh/id_ed25519 type -1
debug1: identity file /root/.ssh/id_ed25519-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2
ssh_exchange_identification: read: Connection reset by peer
服务器(子网 A 172.16.0.141)
$(which sshd) -d -p 23
debug1: sshd version OpenSSH_6.6.1, OpenSSL 1.0.1f 6 Jan 2014
debug1: key_parse_private2: missing begin marker
debug1: read PEM private key done: type RSA
debug1: private host key: #0 type 1 RSA
debug1: key_parse_private2: missing begin marker
debug1: read PEM private key done: type DSA
debug1: private host key: #1 type 2 DSA
debug1: key_parse_private2: missing begin marker
debug1: read PEM private key done: type ECDSA
debug1: private host key: #2 type 3 ECDSA
debug1: could not open key file '/etc/ssh/ssh_host_ed25519_key': No such file or directory
Could not load host key: /etc/ssh/ssh_host_ed25519_key
debug1: rexec_argv[0]='/usr/sbin/sshd' 
debug1: rexec_argv[1]='-d'
debug1: rexec_argv[2]='-p'
debug1: rexec_argv[3]='23'
Set /proc/self/oom_score_adj from 0 to -1000
debug1: Bind to port 23 on 0.0.0.0.
Server listening on 0.0.0.0 port 23.   
debug1: Bind to port 23 on ::.
Server listening on :: port 23.
debug1: Server will not fork when running in debugging mode.
debug1: rexec start in 5 out 5 newsock 5 pipe -1 sock 8
debug1: inetd sockets after dupping: 3, 3
debug1: getpeername failed: Transport endpoint is not connected
debug1: get_remote_port failed

https://superuser.com/questions/856989/ssh-error-ssh-exchange-identification-read-connection-reset-by-peer


VPC设置及案例说明:

我确实有在 VPC 中运行的 AWS EC2 Amazon 实例 (172.16.0.0/16)

问题:

  • 子网 A 和子网 B 的主机均能 ping 通。
  • 子网 A 中的主机可以 ssh 到子网 B 中的主机
  • 子网 B 中的主机可以 ssh 到子网 A 中的实例 A
  • 子网 B 中的主机都无法 ssh 到子网 A 中的其他实例(实例 A 除外),出现错误:ssh_exchange_identification:读取:连接由对等方重置 IF_AND_ONLY_IF 子网 A 中的实例将默认网关设置为 NAT-InstanceA(示例“默认通过172.16.0.200 dev eth0')。如果存在带有 not_changed 默认网关的 instance_in_subnetA (例如“default via 172.16.0.1 dev eth0”),那么您可以从 SubnetBhosts ssh 到该实例
  • 注释:如果subnetA中没有NAT,则subnetA中的实例将不会有传出互联网连接

所以...

该问题可能是由 Amazon AWS 路由器和/或 NAT 配置引起的。

就目前而言,我想,尽管事实上,VPC路由表被设定为:

Destination Target 
172.16.0.0/16 local
0.0.0.0/0   igw-nnnnn

子网A实例位于

172.16.0.0/24

(编辑:问题的根源:路由表通过 NAT 实例重定向 172.16.0.0/24 以外的流量,覆盖 AWS 端路由:172.16.0.0/16)

default via 172.16.0.200 dev eth0 
172.16.0.0/24 dev eth0  proto kernel  scope link  src 172.16.0.60

子网B实例位于

172.16.3.0/24

当子网 B 中的主机连接到子网 A 中的实例(NAT 实例 A 除外)时,流量如下所示:

172.16.3.X/24  --> 172.16.3.1 --> 172.16.0.Y  
                                      V
                        ???   <-- 172.16.3.200 (NAT) 

这就是问题所在。我必须tcpdump验证这一点,它可能可以通过 NAT 规则修复,尽管它比应有的更复杂。

实际上,AWS路由器中的规则

Destination Target 
172.16.0.0/16 local

理论上应该覆盖 VPC/16 子网,但实例/24 子网 + NAT 网关隐藏了“system_level”上的功能。

答案1

在subnetA 中的实例(NAT 实例为172.16.0.200)上,路由表如下所示:

default via 172.16.0.200 dev eth0
172.16.0.0/24 dev eth0  proto kernel  scope link  src 172.16.0.141

实际上,还有一项补充:

$ ip r a 172.16.3.0/24 via 172.16.0.1
(or ip r a 172.16.3.0/16 via 172.16.0.1)

修复系统路由表:

default via 172.16.0.200 dev eth0
172.16.0.0/24 dev eth0  proto kernel  scope link  src 172.16.0.141
172.16.3.0/24 via 172.16.0.1 dev eth0

并将 VPC 子网路由转移到 AWS 路由器

Destination Target 
172.16.0.0/16 local
0.0.0.0/0   igw-nnnnn

相关内容