Linux网络 —— Network namespace
Docker是基于Linux Kernel的namespace做的隔离,这里重点讨论linux的Network namespace网络隔离。
1.Linux中的网卡
# 查看网络信息
ip a[ddr]
lo: 本地网卡,回环的网络接口127.0.0.1
eth0: 网络通信的,用来连接网络的
eth1: 本地网卡,虚拟机配置的网段,与宿主机关联
docker0: docker的网卡
# 简化命令
ip link show
# 都是以文件形式存储
ls /sys/class/net
修改网络配置:linux 网络.note [参考]
cd /etc/sysconfig/network-scripts/
vi ifcfg-eth0
一个网卡可以绑定多个IP
ip addr add 192.168.100.120/24 dev eth0 # 给eth0网卡添加192.168.100.120的ip信息
ip addr delete 192.168.100.120/24 dev eth0 # 删除添加的IP
2.Network Namespace
Network Namespace是实现网络虚拟化的重要功能,它能创建多个隔离的网络空间,它们有独自的网络栈信息.不管是虚拟机还是容器,运行的时候仿佛自己就在独立的网络中.
Network Namespace 实战
# 添加一个namespace
ip netns add ns1
# 查看当前具有的namespace
ip netns list
# 删除namespace
ip netns delete ns1
# 进入net的命名空间
ip netns exec ns1 ip a
ns1的lo 与宿主机网络是隔离的
默认lo的state状态时DOWN.
# 启动 lo 网卡
ip netns exec ns1 ifup lo
ip netns exec ns1 ip link set lo up #等同于
# 停掉 lo 网卡
ip netns exec ns1 ifdown lo
ip netns exec ns1 link set lo down #等同于
3.两个namespace互联
veth pair:虚拟以太网连接。必须是成对出现的。
思想:在宿主机上创建成对的veth网卡,分别分配给ns1和ns2,来实现ns1和ns2通讯的。
# 创建ns2,并启用网卡
ip netns add ns2
ip netns exec ns2 ip link set lo up
# 创建veth peer
ip link add veth-ns1 type veth peer name veth-ns2
# 将veth-ns1交给ns1
ip link set veth-ns1 netns ns1
ip netns exec ns1 ip a # 查看
# 由于状态时Dwon,现在将它启用
ip netns exec ns1 ip link set veth-ns1 up
ip netns exec ns1 ip a
此处虽然网卡启动了,但是没有ip,因为它也不知道。所以要设置一下。
ip netns exec ns1 ip addr add 192.168.0.11/24 dev veth-ns1
ip netns exec ns1 ip a
同理,设置ns2的veth
ip link set veth-ns2 netns ns2
ip netns exec ns2 ip a
ip netns exec ns2 ip addr add 192.168.0.12/24 dev veth-ns2
ip netns exec ns2 ip a
ip netns exec ns2 ip link set veth-ns2 up
ip netns exec ns2 ip a
两边都设置好,成对的网卡才能上线,网卡状态都UP
现在状态如图
# 查看连通性 ip netns exec ns1 ping 192.168.0.12 ip netns exec ns2 ping 192.168.0.11
至此,两边网络是互通的。