网络隔离是Linux系统中重要的安全和管理功能,可以通过多种方式实现。以下是几种主要的网络隔离方法:
网络命名空间是Linux内核提供的轻量级虚拟化技术,可以为进程提供独立的网络栈。
# 创建新的网络命名空间
ip netns add ns1
# 查看所有网络命名空间
ip netns list
# 在命名空间中执行命令
ip netns exec ns1 bash
# 删除网络命名空间
ip netns delete ns1
# 创建两个命名空间
ip netns add ns1
ip netns add ns2
# 创建虚拟以太网对
ip link add veth1 type veth peer name veth2
# 将虚拟接口分配到命名空间
ip link set veth1 netns ns1
ip link set veth2 netns ns2
# 在各自命名空间中配置IP
ip netns exec ns1 ip addr add 192.168.1.1/24 dev veth1
ip netns exec ns2 ip addr add 192.168.1.2/24 dev veth2
# 启用接口
ip netns exec ns1 ip link set veth1 up
ip netns exec ns2 ip link set veth2 up
# 测试连通性
ip netns exec ns1 ping 192.168.1.2
VLAN(虚拟局域网)可以在二层网络实现隔离。
# 添加VLAN接口
ip link add link eth0 name eth0.100 type vlan id 100
# 配置IP
ip addr add 192.168.100.1/24 dev eth0.100
# 启用接口
ip link set eth0.100 up
使用防火墙规则实现网络隔离:
# 阻止两个网络之间的通信
iptables -A FORWARD -i eth1 -o eth2 -j DROP
iptables -A FORWARD -i eth2 -o eth1 -j DROP
# 只允许特定IP访问
iptables -A INPUT -s 192.168.1.100 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -j DROP
# 创建桥接
brctl addbr br0
brctl addif br0 eth1
brctl addif br0 eth2
ip link set br0 up
# 使用ebtables隔离
ebtables -A FORWARD -i eth1 -o eth2 -j DROP
# 创建流量类别
tc qdisc add dev eth0 root handle 1: htb
tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit
tc class add dev eth0 parent 1: classid 1:2 htb rate 1mbit
# 将流量分类
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip src 192.168.1.100 flowid 1:1
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip src 192.168.1.101 flowid 1:2
Docker提供了多种网络模式:
# 创建隔离的bridge网络
docker network create --driver bridge isolated_net
# 运行容器使用特定网络
docker run --network=isolated_net -it ubuntu bash
# 查看网络配置
docker network inspect isolated_net
# 创建OVS桥接
ovs-vsctl add-br ovs-br0
# 添加端口
ovs-vsctl add-port ovs-br0 eth0
ovs-vsctl add-port ovs-br0 veth1
# 设置VLAN隔离
ovs-vsctl set port veth1 tag=100
以上方法可以单独使用,也可以组合使用以实现更精细的网络隔离控制。