hetnzer解决mac地址滥用警告

December 05, 2021

本文最后更新于2021年12月27日

Google搜索“hetzner mac abuse”关键字,可以说,在Hetzner购买独立服务器的确物美价廉,售后友好,上下行网络都是标准G口,即便是欧洲商家也很难找出其二。

但是,Hetzner位于德国,因此其网络限制比较多,比如NFS端口不能完全暴露外网,MAC地址限制等等。

有关于Hetzner关于MAC限制的说明,这个规则适用于整个Hetzner下的所有Dedicated Server,不区分机房。

那么,如果在Hetzner独服上,安装Proxmox,并开通带有独立IPv6的VM&LXC,就会基本上一定收到”MAC Abuse Report”,警告机器能够检测到除主机mac之外的其他mac,违反了协议,超过指定时间会被锁定机器。

购买独立IPv4在2022年将会上涨,包括租费以及首次安装费,不建议独立IPv4,如果购买了额外IPv4,则需要在面板里手工绑定mac,不涉及本文中提到的解决方案。

官方文档解决方案

Reference

翻译一下,Proxmox的防火墙存在Bug,建议阻止outgoing方向的43端口,但是这个bug只在Proxmox VE 6版本存在,我在PVE7同样收到了MAC Abuse邮件。

“破罐子破摔”型方案

这个报告的确很恼人,而且频率极高,如果非必须使用PVE,可以不用……

社区方案

上一个方案属于开玩笑了,想必点进来都是想解决问题的,搜索了所有提及相关关键字的帖子or方案,大致分为几类。

pfsense

使用pfsense将子网网络独立,相对比较复杂,而且,子网内的机器比较依赖中间的中转。参考链接

禁用一些转发(验证不一定成功)

sysctl.conf

net.ipv4.igmp_link_local_mcast_reports = 0

包括社区提及,关闭rpcbind相关服务

systemctl disable rpcbind.service rpcbind.socket rpcbind.target

我的终极方案(IPv4 NAT + IPv6)

最近手头增加了两台独服,参考了另一个Kimsufi的独服网络配置方案,相对简单,而且在PVE6 和 PVE7上,均能生效。

首先防火墙配置,正常设置一条规则(或者一个安全群组,vm和节点都能使用),阻止进出的43端口TCP链接。

由于是单个IPv4和一个/64位的IPv6段,拥有独立IP的vm都是单IPv6,直接设置一个经过主网卡进行转发。

所以对于IPv6的链接,流向如下:

Outside <==> vmbr0(main IPv4 + main IPv6) <==> vmbr1 (a subnet in main IPv6)

宿主机配置

一个示例的/etc/network/interfaces文件如下

### Hetzner Online GmbH installimage

source /etc/network/interfaces.d/*

auto lo
iface lo inet loopback
iface lo inet6 loopback

auto enp2s0    #ifconfig提前找到的主网卡名称
iface enp2s0 inet manual
iface enp2s0 inet6 manual

auto vmbr0
iface vmbr0 inet static
  address <YOUR_MAIN_IPV4>         #后台可查
  netmask <YOUR_MAIN_IPV4_NETMASK> #后台可查
  gateway <YOUR_MAIN_IPV4_GATEWAY> #后台可查
  bridge_ports enp2s0              #ifconfig提前找到的主网卡名称
  bridge_stp off
  bridge_fd 0
  bridge_maxwait 0

iface vmbr0 inet6 static
  address 2a01:aaa:aaa:aaa::2      #后台可查,这里假设一个虚拟的IPv6/64地址
  netmask 64                       #后台可查,Hetzner一般为/64
  gateway fe80::1                  #后台可查,Hetzner一般为此gateway
  bridge_ports enp2s0
  bridge_stp off
  bridge_fd 0

## 内网桥接 
auto vmbr1
iface vmbr1 inet static
  address 10.10.2.1
  netmask 255.255.255.0
  bridge_ports none
  bridge_stp off
  bridge_fd 0
  post-up iptables -t nat -A POSTROUTING -s '10.10.2.0/24' -o vmbr0 -j MASQUERADE
  post-down iptables -t nat -D POSTROUTING -s '10.10.2.0/24' -o vmbr0 -j MASQUERADE

  # NAT
  post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport <EXPOSE_PORT> -j DNAT --to 10.10.2.2:<VM_PORT>
  post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport <EXPOSE_PORT> -j DNAT --to 10.10.2.2:<VM_PORT>

iface vmbr1 inet6 static
  address 2a01:aaa:aaa:aaa::3/64
  bridge_ports none
  bridge_stp off
  bridge_fd 0
  post-up echo 1 > /proc/sys/net/ipv6/conf/all/proxy_ndp
  post-up echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
  post-up echo 1 > /proc/sys/net/ipv6/conf/default/forwarding
  post-up /sbin/ip -f inet6 neigh add proxy 2a01:aaa:aaa:aaa::3 dev vmbr1
  # 下面两行为一对,指::100/128的IPv6地址通过vmbr0转发出去,而进网增加了一条经::3在vmbr1上转发的规则,有几个独立的固定IPv6,则增加几对
  post-up /sbin/ip -f inet6 neigh add proxy 2a01:aaa:aaa:aaa::100 dev vmbr0
  post-up /sbin/ip -f inet6 route add 2a01:aaa:aaa:aaa::100 dev vmbr1

建议使用我之前提过的较为安全的修改方式,避免interfaces错误导致无法连接机器,文章链接

保存,并重启networking服务。

service networking restart

如果顺利的话,SSH链接恢复,检查Proxmox,两块虚拟网卡vmbr0和vmbr1正常。

Proxmox配置

VM和LXC(即CT)配置方式类似。

对于IPv6分配,采用静态,选择一个在interfaces内已经配置好转发的地址,桥接选择vmbr1,记得开启防火墙并同步双向43的规则,正常情况下,机器的IPv6应该是通的。

而对于NAT的IPv4地址,不开启防火墙也没有问题,因为43规则已经用于宿主机,端口转发会遵从宿主机防火墙配置。


Copyright © Arcto 2022, Built with Gatsby