我正在创建一个新的虚拟接口:
ifconfig eth0:0 123.123.22.22
该命令netstat -tlnp
返回如下内容:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:50505 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:7337 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:3790 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:6001 0.0.0.0:* LISTEN 2450/Xvnc4
tcp 0 0 0.0.0.0:6002 0.0.0.0:* LISTEN 2626/Xvnc4
tcp 0 0 192.168.2.77:22 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:3001 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:52698 0.0.0.0:* LISTEN 3488/plugin_host
tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN -
tcp6 0 0 ::1:7337 :::* LISTEN -
tcp6 0 0 :::5901 :::* LISTEN 2450/Xvnc4
tcp6 0 0 :::5902 :::* LISTEN 2626/Xvnc4
tcp6 0 0 ::1:631 :::* LISTEN -
tcp6 0 0 ::1:5432 :::* LISTEN -
tcp6 0 0 ::1:6010 :::* LISTEN -
因此,如果我nmap
同时创建虚拟和物理接口,结果将是相同的(这通过中的“本地地址”值进行解释netstat
)。我尝试关闭这个新虚拟接口中的端口(5901,5902,6001,6002)。对于nmap
两个接口:
PORT STATE SERVICE
5901/tcp open vnc-1
5902/tcp open vnc-2
6001/tcp open X11:1
6002/tcp open X11:2
命令:
sudo iptables -A INPUT -i eth0:0 -p tcp --dport 5901 -j DROP
该端口将无法访问,但打开(对于nmap
)。有什么办法可以阻止eth0:0
监听来自 的流量0.0.0.0
吗?
如果主机有两个 IP 地址:192.168.1.1 和 10.1.2.1,并且该主机上运行的服务器侦听 0.0.0.0,则可以通过这两个 IP 地址访问它。 (维基百科)
目标:
- 在 LAN 中公开新接口,并更改 Mac 地址(看起来像另一台机器)
- 将 docker 容器绑定到最近创建的新接口,公开某些端口中的服务。
答案1
要在现有网卡之上模拟第二个(虚拟)以太网卡,该网卡具有不同的 MAC,并且来自不同的命名空间(例如容器),您需要麦克夫兰界面。
这里是如何在 Docker 容器中使用它们的说明。
您似乎对您尝试过的一些网络功能背后的原理有点困惑。也许以下内容有帮助:
eth0:0
ifconfig
这只是该工具用来处理某个接口上的第二个 IP 地址的旧方法。如果您使用像这样的较新工具ip addr
,它只会在 上显示第二个 IP 地址eth0
。这仅适用于 OSI Level 3,因此没有不同的 MAC 地址,它不会像在 docker 中那样与网络命名空间交互,而且使用起来通常很痛苦,因为您必须确保每个应用程序都正确绑定到其中一个地址。并且需要这种绑定来防止应用在 0.0.0.0 上监听;没有办法一般性地阻止“eth0:0
监听来自0.0.0.0
”的流量(忽略这种形式的句子根本没有意义;接口没有监听,应用程序通过绑定监听某些IP地址和/或某些接口)。iptables
允许您进行数据包过滤、防火墙、NAT 等。不允许您更改 MAC 地址、控制哪些应用程序侦听哪个地址等。“我已经使用过
modprobe
”也是没有意义的:modprobe
是一种加载内核模块的方式,如果你不能说出你想使用哪个内核模块,用于什么目的,以及为什么它不首先自动加载,这句子没有传达任何信息。
另外,请阅读XY问题:当您想做 X,并且认为您可能需要做 Y 才能实现 X,总是询问有关X的事情。然后提到你尝试过 Y。在很多情况下(比如这里)Y 是完全错误的。