英特尔AMT(主动管理技术)如何不干扰TCP / IP主机堆栈?


15

我一直在使用的Intel开发套件包括一个远程管理功能 (另请参见此处Ubuntu手册页),该功能允许在操作系统挂起时进行远程重启。

它具有侦听与操作系统共享的IP地址上的几个端口(具体来说为16992和16993)的功能。(通过侦听DHCP请求或发出自己的DHCP请求;我不确定,但是在这种模式下它使用共享的MAC地址)

我让它在单独的IP地址上运行,因为我担心一个潜在的用例:AMT如何防止主机网络堆栈与其冲突?

换句话说,英特尔管理软件现在正在侦听(至少)两个带外且不了解操作系统的TCP端口。假设我启动了到远程主机的TCP连接,并且主机堆栈选择16992或16993作为本地端口以侦听[包返回框]。

从远程主机返回的数据包不会被“刺破”并且永远不会到达操作系统吗?还是有一些预防措施,例如Linux内核中的Intel驱动程序知道TCP应该避开端口16992?(似乎不太可能,因为这是与操作系统无关的功能。)或者管理接口是否可以将发送到端口16992(不属于已知管理会话)的流量转发回主机堆栈?

无论哪种方式,我都不愿意将其用于网络密集型负载,直到我了解其工作原理。我搜索了英特尔文档,也找不到任何内容。

我想可以通过启动约30,000个TCP连接并检查连接是否有效(即使端口重叠)也可以进行测试。但是我还没有机会这样做。

(注:我意识到这个问题类似于基于Intel vPro的计算机如何维护IP连接?,但是该问题通常是解决连接问题,而不是解决与主机堆栈重叠的特定TCP端口的问题。)


7
我注意到有人投票关闭了此主题。在这种情况下,我想问:这是怎么不是专业的服务器管理员有关?如果您要启用带外管理技术,您是否不想知道它是否会对您的网络通信产生影响?
mpontillo 2014年

我的猜测是,它将查看这些端口上的所有流量,如果不是,它将识别出的流量会传递给操作系统。但这完全是猜测。
2014年

1
好问题。我认为这种功能的正确实现必须在不同的MAC地址上使用其自己的IP堆栈,以完全避免可能的冲突。您不需要30000个TCP连接即可测试冲突。相反,您可以尝试类似的方法,nc -p 16992 example.com 22然后看看会发生什么。
kasperd 2014年

@kasperd谢谢;我不知道你能轻易做到这一点。我继续进行测试。不太适合AMT ...
mpontillo 2014年

Answers:


8

将AMT配置为侦听共享IP地址后,我运行了kasperd在上面的评论中提到的测试。(example.com当然,实际上是针对我自己的带有SSH服务器的远程主机,而不是针对SSH服务器),结果如下:

正面测试用例(使用AMT 使用的端口):

$ nc -p 16991 example.com 22
SSH-2.0-OpenSSH_5.9p1 Debian-5ubuntu1.4
^C
$

负测试用例(使用AMT使用的端口):

$ nc -p 16992 example.com 22
$

(几分钟后,否定测试用例超时,并返回到shell提示符。)

因此,您可以看到,返回端口16992的数据包在到达主机的TCP / IP堆栈之前已被丢弃。

建议:如果可靠的联网对您很重要,请不要在与主机TCP / IP堆栈相同的IP地址上启用AMT!


2

英特尔论坛上有一个有争议的话题,主机IP和英特尔AMT设备IP之间的映射 建议

使用静态IP时,必须为AMT和主机配置不同的IP地址。

和一个解释:

当您为vPro计算机配置静态IP时,AMT将使用称为manageability mac的mac地址,该地址仅在静态IP模式下起作用。可管理性mac地址不同于主机提供的mac地址。

我确认将DHCP与AMT和主机同时使用会导致路由问题。例如ping误导:

64 bytes from 192.168.1.11: icmp_seq=18 ttl=64 time=0.559 ms
64 bytes from 192.168.1.11: icmp_seq=18 ttl=255 time=0.614 ms (DUP!)
64 bytes from 192.168.1.11: icmp_seq=19 ttl=64 time=0.579 ms
64 bytes from 192.168.1.11: icmp_seq=19 ttl=255 time=0.630 ms (DUP!)
64 bytes from 192.168.1.11: icmp_seq=20 ttl=64 time=0.553 ms
64 bytes from 192.168.1.11: icmp_seq=20 ttl=255 time=0.602 ms (DUP!)

1

从远程主机返回的数据包不会被“刺破”并且永远不会到达操作系统吗?

来自带有“ AMT端口”的远程主机的所有数据包都不会到达任何操作系统。它们被英特尔ME / AMT拦截。默认情况下,它们是端口16992-16995、5900(AMT版本6 +),623、664。


1

应该注意的是,AMT旨在作为客户端OOBM技术而非服务器之一。因此,可以,您的计算机可能决定使用AMT端口,但是仅在您专门配置了AMT端口的情况下才可以使用。如IANA规范所建议的那样,大多数OS都带有预先配置的临时端口,范围为49152至65535,某些Linux发行版具有32768至61000,而旧版Windows具有1025-5000。

因此,从我的角度来看,将共享IP用于AMT是省钱的,因为它的端口不在临时范围内(除非您知道您要做什么,并更改此特定设置),并且不应被任何应用程序用作侦听端口。


-2

一种解决方案可能是使用设置Windows TCP堆栈的端口netsh

默认情况下,Windows使用端口49152 >> 65636(或任何上限),因此使用AMT非常安全。您可以使用设置端口范围netsh。例如,我始终为外围计算机使用大约1000个端口。

此外,英特尔剥离了AMT命令,并将这些端口上的所有其他流量(实际上是16991-16995!)传递给操作系统(如果存在操作系统)。因此,如果您的应用程序打开了AMT范围内的端口,则流量仍将通过操作系统传递到该应用程序,因为就像我说的那样,英特尔仅去除了AMT管理命令。您的应用程序不太可能发送AMT命令。


4
该答案假定(1)您正在使用Windows,并且(2)您没有使用任何可能出于其他原因尝试使用AMT重叠端口的软件。(例如,您可能拥有使用随机UDP端口的VoIP应用程序)。它还声称英特尔如何“剥离” AMT命令,这在我的回答中显然是错误的。您可以提供参考以支持您的主张吗?如果英特尔有一天将其视为一个错误并修复,我不会感到惊讶,但是在我发布答案时,他们显然没有。
mpontillo
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.