本帖最后由 raysonx 于 2021-8-25 22:38 编辑
你是否遇到了这类难题?- IoT 、智能家居、播放器等黑盒设备不够安全,直接接入互联网有暴露隐私、被黑客入侵、被厂商后门操控的风险。
- 黑盒设备和其他设备在同一子网内,一旦被入侵,存在攻击其他设备的可能性。然而同一子网内是没有防火墙保护的。
- 为了安全,我们可以将这类设备移入单独的 VLAN 。但是,局域网内的服务发现将不可用。要互访只能手动输入 IP 地址,十分麻烦,更别说很多应用根本没有设计让你输 IP 的地方(比如 Apple 的家庭 App 和 AirPlay )。
让 mDNS Reflector 来拯救你吧!mDNS Reflector 可以运行在防火墙或者同时接入多个 VLAN 的多宿( multi-homed )主机上,可以将来自一个接口(或虚拟接口)的 mDNS 流量反射到其他接口上,解决跨 VLAN 服务发现难题。 举例假设你有一台运行 Linux 系统的防火墙,br0 对应你日常上网用的 VLAN,br1 对应你 IoT 设备的 VLAN 。不同 VLAN 下的设备默认没办法自动进行服务发现,。为了让日常 VLAN 可以发现 IoT VLAN 的设备,可以在防火墙上运行 mdns-reflector br0 br1,让 mDNS Reflector 在 br0 、br1 两个接口间运行 mDNS 反射,这样即使跨 VLAN 也可以正常进行服务发现了。 通过配置防火墙规则,你可以限制 IoT VLAN 的 Internet 访问权限,只允许从你的日常 VLAN 的某几个 IP 地址访问 IoT VLAN 的某几个 IP 地址的某几个端口,让安全与便利同在。 mDNS Reflector 的特点:- 支持在主流类 Unix 系统上运行。支持 Linux (包括 OpenWRT )、FreeBSD (包括 pfSense 、OPNsense)、macOS 。
- 几十 kB 大小,只使用到了 C 标准库,不依赖任何第三方库,运行过程中没有动态内存分配,占用资源小,非常轻量。
- IO 多路复用。在 Linux 系统下使用 epoll 系统调用,在 BSD/macOS 系统下使用 kqueue 系统调用,非常高效。
- 不需要 root 权限。
- 同时支持 IPv4 和 IPv6 。
- 支持多 zone 隔离。
多 zone 隔离举例 比如同时有 eth1-4 四个接口,我们想人为把它们分为两组:eth1 与 eth2 为一组,eth3 与 eth4 为另一组。组内允许 mDNS 反射,组间不允许反射。那么可以直接运行 mdns-reflector eth1 eth2 -- eth3 eth4 下载安装已经做好了 deb 和 rpm 的打包文件,使用 rpm 或者 deb 包管理器的朋友可以直接自行编译打包。后续我会视情况 host OpenWRT 以及其他常见 Linux 发行版的二进制包和源方便使用。 Docker 镜像也做好了。想用 Docker 跑的直接拉我的 repo 或者自己 docker build 都可以。 其他系统目前请自己从源码编译。只需要 C 编译器和 cmake: mkdir build && cd buildcmake -DCMAKE_BUILD_TYPE=release ..
makemake install
开源许可证:GPLv3
|