我尝试过但没有帮助的行动计划

我尝试过但没有帮助的行动计划

我们收到了来自 Hetzner 网络团队的电子邮件,要求我们不要使用属于该子网的虚拟机的 MAC 地址。

我们将Xen服务器主机配置为路由器使用本指南

在询问更多详细信息后,Hetzner 支持人员回答说,通常情况下,虚拟机管理程序的网络配置应该只允许数据包使用真实 NIC 的 MAC 地址退出系统。但如果您没有发现问题,您可以尝试使用 IPtables 阻止这些传出数据包。

所以我们的问题是:

如果有人在 Hetzner 或其他专用服务器提供商处遇到此类问题。
你是怎么解决的?

谢谢

我尝试过但没有帮助的行动计划

  1. 创造单独的路由器虚拟机
  2. sysctl.conf使用指令关闭所有虚拟机和主机上的 IPv6
  3. 在两个主机接口上进行伪装

    -A POSTROUTING -o xenbr0 -j MASQUERADE
    -A POSTROUTING -o eth0 -j MASQUERADE 
    
  4. 培养附加 xenbr0:1 接口

  5. 添加以下内容到/etc/sysctl.conf

    net.ipv4.conf.default.proxy_arp = 1
    

配置详情

主机/路由器配置:

[root@xenserver-custom ~]# cat /etc/sysctl.conf

net.ipv4.ip_forward = 1  
net.ipv6.conf.all.forwarding=1

net.ipv4.conf.default.proxy_arp = 0  

net.ipv4.conf.all.send_redirects = 0  
net.ipv4.conf.default.send_redirects = 0  
net.ipv4.conf.lo.send_redirects = 0  
net.ipv4.conf.xenbr0.send_redirects = 0  

[root@xenserver-custom network-scripts]# ip addr add 85.91.107.177/28 dev xenbr0

[root@xenserver-custom ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 0c:c4:7a:e7:dc:33  txqueuelen 1000  (Ethernet)
        RX packets 4704816217  bytes 6002063739181 (5.4 TiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 6294828922  bytes 7643975899027 (6.9 TiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1  (Local Loopback)
        RX packets 518545683  bytes 6322784653872 (5.7 TiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 518545683  bytes 6322784653872 (5.7 TiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vifxxxx

.....................

xenbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 115.35.61.184  netmask 255.255.255.192  broadcast 115.35.61.191
        ether 0c:c4:7a:e7:dc:33  txqueuelen 1  (Ethernet)
        RX packets 3070611738  bytes 8670969429554 (7.8 TiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2680055664  bytes 9822630727363 (8.9 TiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

VM 来宾配置

[root@r1213a network-scripts]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=85.91.107.184
PREFIX=28
GATEWAY=85.91.107.177
DNS1=213.133.98.98
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no

[root@r1213a network-scripts]# ifconfig
eth0      Link encap:Ethernet  HWaddr B6:8F:14:74:A6:B6
          inet addr:85.91.107.184  Bcast:85.91.107.191  Mask:255.255.255.240
          inet6 addr: fe80::b48f:14ff:fe74:a6b6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:27122939 errors:0 dropped:2 overruns:0 frame:0
          TX packets:2218911 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:5404322465 (5.0 GiB)  TX bytes:1061055301 (1011.9 MiB)


[root@r1213a network-scripts]# ip route
default via 85.91.107.177 dev eth0
85.91.107.176/28 dev eth0  proto kernel  scope link  src 85.91.107.184

[root@r1213a network-scripts]# traceroute google.com
traceroute to google.com (172.217.18.110), 30 hops max, 60 byte packets
 1  xenserver.localdomain (85.91.107.177)  0.081 ms  0.029 ms  0.039 ms
 2  static.129.61.69.159.clients.your-server.de (159.69.61.129)  0.390 ms  0.410 ms  0.370 ms
 3  core22.fsn1.hetzner.com (213.239.245.121)  0.393 ms  0.416 ms  0.424 ms
 4  core0.fra.hetzner.com (213.239.252.33)  5.207 ms  5.184 ms core0.fra.hetzner.com (213.239.252.29)  5.049 ms
 5  72.14.218.94 (72.14.218.94)  5.273 ms  5.249 ms 72.14.218.176 (72.14.218.176)  4.990 ms
 6  108.170.251.193 (108.170.251.193)  5.139 ms *  5.019 ms
 7  209.85.241.75 (209.85.241.75)  5.834 ms 216.239.40.58 (216.239.40.58)  5.092 ms 172.253.64.119 (172.253.64.119)  5.707 ms
 8  108.170.251.144 (108.170.251.144)  15.292 ms zrh04s05-in-f110.1e100.net (172.217.18.110)  4.952 ms  4.903 ms

答案1

我认为如果您使主机 MASQUERADE 传出数据包可以解决这个问题,您可以按照iptables如下规则来执行此操作

iptables -t nat -A POSTROUTING -i eth0 -j MASQUERADE

该规则告诉内核将传出数据包重写eth0为该接口的数据包,同时它还保留反向映射,以便能够将响应流量返回给发起者。

然而,情况可能是,由于 VM 数据包是通过桥接而不是转发传递的,因此该iptables规则不会对该流量生效。这个链接是对其的简要总结。

答案2

我申请了解决方案来自 superuser.com。这对我有用

所有功劳归于 Alexey Degtyarev

还要感谢 Hetzner 网络团队,他们指出了解决方案,但我尝试在同一网络中创建第二个 xenbr 并为其分配 VIF 时走错了方向。但它不起作用,因为虚拟机重新启动后,VIF 编号会重新生成。

在 Hetzner 中,您有两种类型的附加 IP 地址可与专用服务器一起使用:单个 IPv4 和 IPv4 子网。对于每个 IP,您都会获得一个 MAC 地址,并且必须在新 VM 实例的网络接口上使用该 MAC。对于每个附加子网,您必须设置一个新网络,并在该网络和服务器的默认网络(与 eth0 关联)之间设置路由。

在 XenServer 中,这可以使用 Linux 控制台来完成:

xe network-create name-label="Additional network" name-description="46.xx.yy.zz/28"

提示 1:直到我将其中一台虚拟机分配到 Xen Center 中的新网络后,xapi0 网桥才显示在主机上。如果其他人也遇到这种情况,只需提示即可节省时间。

这将创建一个连接到 XenServer 中新网桥(默认为 xapi0)的新网络。然后将网络的第一个可用 IP 地址(根据其网络掩码)分配给该网桥:

ip addr add 46.xx.yy.1/28 dev xapi0

现在,您可以添加新的虚拟机,并将自动生成的 MAC 连接到新创建的网络而不是默认网络。流量将在 XenServer 内部进行交换和路由。

完成此设置后,我得到了 Hetzner 网络团队的确认,只允许 MAC 在交换机端口上可见。

提示 2:您可以从主机端验证 eth0 上不再有违规流量:

tcpdump -i eth0 -en|egrep -i 'mac1|mac2'

这一切都应该在 xapi0 上看到

tcpdump -i xapi0 -en|egrep -i 'mac1|mac2'

其中 mac1,mac2 - Hetzner 报告为禁止的 MAC 地址。

相关内容