Sign inSign up

haksrpd/vip

By haksrpd

•Updated 8 months ago

Virtual IP container

Image
Networking
0

838

haksrpd/vip repository overview

⁠alpine-loopback

在 Docker Compose 中通过环境变量为 Alpine Linux 容器配置回环接口地址,并支持 AnyIP 功能。

⁠文件结构

.
├── Dockerfile          # 基于 alpine:3.19,安装 iproute2
├── entrypoint.sh       # 启动时自动配置回环地址 & AnyIP 路由
├── docker-compose.yml  # 示例 Compose 配置
└── README.md

⁠快速开始

# 构建并启动
docker compose up -d --build

# 查看回环地址
docker compose exec alpine-lo ip addr show lo

# 查看 AnyIP local 路由
docker compose exec alpine-lo ip route show table local dev lo

⁠环境变量说明

变量说明示例
LOOPBACK_ADDRS逗号分隔的回环地址(含前缀长度),逐条 ip addr add 到 lo127.0.0.2/8,127.0.0.3/8
ANYIP_ROUTES逗号分隔的子网,以 ip route add local 挂到 lo,整段子网均可响应192.0.2.0/24,198.51.100.0/24
ANYIP_ROUTE_LOCALNETtrue 时设置 net.ipv4.conf.all.route_localnet=1,使 127/8 可本地路由(需 SYS_ADMIN)false

⁠功能对比

LOOPBACK_ADDRSANYIP_ROUTES
实现方式ip addr add <ip> dev loip route add local <subnet> dev lo
适用场景少量已知固定 IP大段地址池、VIP、网络模拟
地址可见性ip addr show lo 可见不显示为接口地址,但内核响应整段
所需权限NET_ADMINNET_ADMIN

⁠AnyIP 原理

Linux 内核的 AnyIP 特性通过将子网加入 local 路由表实现:

ip route add local 192.0.2.0/24 dev lo

内核将该网段标记为本机地址,发往该段内任意 IP 的报文均由本机处理, 无需为每个地址单独执行 ip addr add。

⁠权限要求

功能所需 capability
回环地址 / AnyIP 路由NET_ADMIN
route_localnet sysctlSYS_ADMIN + compose sysctls

⁠安全提示

route_localnet=1 会关闭内核对 127/8 报文的 martian 检查, 可能使本应只监听 localhost 的服务暴露给外部路由,仅在明确需要时开启。

⁠验证

# AnyIP:ping 子网内任意地址(无需预先 ip addr add)
docker compose exec alpine-lo ping -c 2 192.0.2.100
docker compose exec alpine-lo ping -c 2 192.0.2.200

# 回环地址
docker compose exec alpine-lo ping -c 2 127.0.0.2

Tag summary

Content type

Image

Digest

sha256:35829a778…

Size

5.2 MB

Last updated

8 months ago

docker pull haksrpd/vip