环境背景:
某业务需复用物理主机资源,同时安全原因只允许其访问公网网段/网卡,另外最好能为其指定一些网络配置或安全策略(例如特定DNS服务器)
方案一
Iptables + 特定组/用户
创建一个新组
1 | groupadd net-limit |
Iptables 限制其访问特定网段
1 | iptables -I OUTPUT -m owner --gid-owner net-limit -d 8.8.8.8 -j DROP |
测试 sg - execute command as different group ID
1 | sg net-limit 'ping -c 1 8.8.8.8' |
劣势
- 进程/服务可能需要root权限
- 进一步的定制化配置实现复杂(例如DNS)
方案二
macvlan + netns
创建macvlan,按需指定物理网卡
1 | ip link add mv1 link eth0 type macvlan mode bridge |
创建netns
1 | ip netns add ns1 |
mv1和ns1关联; 这时ip a
会发现mv1
看不到
1 | ip link set mv1 netns ns1 |
查看 ip netns help
1 | ip netns list |
网络配置
1 | ip netns exec ns1 ip addr add ... |
启动服务/进程
1 | ip netns exec ns1 python /test/1.py |
其它
- namespace 配置文件会优先从/etc/netns/NAME/中寻找,其次/etc/;
例如: 如果有/etc/netns/ns1/resolv.conf 配置文件, ns1将优先使用,
其次才是系统默认的/etc/resolv.conf - 重启相关配置都会丢失, 建议Systemd管理
- 更多
man ip-netns
方案三
虚拟化/容器化