• linux namespace


    //1.常看namespace   ip netns help
    ip netns list
    
    //2.创建一个namespace  (新创建的 namespace 默认不能和主机网络,以及其他 namespace 通信)
    ip netns add  xxxx
    ip netns add  xxxxy
    
    //3.network namespace 之间的通信
    ip link add vethA type veth peer name vethB
    
    //3.1添加veth到namespace xxxx中
    ip link set vethA netns xxxx
    ip link set vethB netns xxxxy
    
    //3.2给 veth pair 配上 ip 地址
    ip netns exec xxxx ip addr add 10.1.1.1/24 dev vethA
    ip netns exec xxxx ip route
    ip netns exec xxxx ip link set dev vethA up ip netns exec xxxxy ip addr add
    10.1.1.2/24 dev vethB ip netns exec xxxxy ip route
    ip netns exec xxxxy ip link set dev vethB up
    //4测试联通 
    ip netns exec xxxx ping 10.1.1.2
    //or
    ip netns exec xxxx sh
    ping
    10.1.1.2

     多个namespace通信

    4.1 使用 ip link 和 brctl 创建 bridge#
    通常 Linux 中和 bridge 有关的操作是使用命令 brctl (yum install -y bridge-utils ) 。但为了前后照应,这里都用 ip 相关的命令来操作。
    
    Copy
    // 建立一个 bridge
    # ip link add br0 type bridge
    # ip link set dev br0 up
    9: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
        link/ether 42:55:ed:eb:a0:07 brd ff:ff:ff:ff:ff:ff
        inet6 fe80::4055:edff:feeb:a007/64 scope link
           valid_lft forever preferred_lft forever
    4.2 创建 veth pair#
    Copy
    //(1)创建 3 个 veth pair
    # ip link add type veth
    # ip link add type veth
    # ip link add type veth
    4.3 将 veth pair 的一头挂到 namespace 中,一头挂到 bridge 上,并设 IP 地址#
    Copy
    // (1)配置第 1 个 net0
    # ip link set dev veth1 netns net0
    # ip netns exec net0 ip link set dev veth1 name eth0
    # ip netns exec net0 ip addr add 10.0.1.1/24 dev eth0
    # ip netns exec net0 ip link set dev eth0 up
    #
    # ip link set dev veth0 master br0
    # ip link set dev veth0 up
    
    // (2)配置第 2 个 net1
    # ip link set dev veth3 netns net1
    # ip netns exec net1 ip link set dev veth3 name eth0
    # ip netns exec net1 ip addr add 10.0.1.2/24 dev eth0
    # ip netns exec net1 ip link set dev eth0 up
    #
    # ip link set dev veth2 master br0
    # ip link set dev veth2 up
    
    // (3)配置第 3 个 net2
    # ip link set dev veth5 netns net2
    # ip netns exec net2 ip link set dev veth5 name eth0
    # ip netns exec net2 ip addr add 10.0.1.3/24 dev eth0
    # ip netns exec net2 ip link set dev eth0 up
    # 
    # ip link set dev veth4 master br0
    # ip link set dev veth4 up
    这样之后,竟然通不了,经查阅 参见 ,是因为
    
    原因是因为系统为bridge开启了iptables功能,导致所有经过br0的数据包都要受iptables里面规则的限制,而docker为了安全性(我的系统安装了 docker),将iptables里面filter表的FORWARD链的默认策略设置成了drop,于是所有不符合docker规则的数据包都不会被forward,导致你这种情况ping不通。
    
    解决办法有两个,二选一:
    
    关闭系统bridge的iptables功能,这样数据包转发就不受iptables影响了:echo 0 > /proc/sys/net/bridge/bridge-nf-call-iptables
    为br0添加一条iptables规则,让经过br0的包能被forward:iptables -A FORWARD -i br0 -j ACCEPT
    第一种方法不确定会不会影响docker,建议用第二种方法。
    
    我采用以下方法解决:
    
    Copy
    iptables -A FORWARD -i br0 -j ACCEPT
    结果:
    
    Copy
    # ip netns exec net0 ping -c 2 10.0.1.2
    PING 10.0.1.2 (10.0.1.2) 56(84) bytes of data.
    64 bytes from 10.0.1.2: icmp_seq=1 ttl=64 time=0.071 ms
    64 bytes from 10.0.1.2: icmp_seq=2 ttl=64 time=0.072 ms
    
    --- 10.0.1.2 ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 999ms
    rtt min/avg/max/mdev = 0.071/0.071/0.072/0.008 ms
    
    # ip netns exec net0 ping -c 2 10.0.1.3
    PING 10.0.1.3 (10.0.1.3) 56(84) bytes of data.
    64 bytes from 10.0.1.3: icmp_seq=1 ttl=64 time=0.071 ms
    64 bytes from 10.0.1.3: icmp_seq=2 ttl=64 time=0.087 ms
    
    --- 10.0.1.3 ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 1000ms
    rtt min/avg/max/mdev = 0.071/0.079/0.087/0.008 ms

    参考:https://www.cnblogs.com/bakari/p/10443484.html

    https://segmentfault.com/a/1190000004059167

     
  • 相关阅读:
    01背包
    用动态规划求两个自然数的最大公约数
    编程实现文件的复制功能,要求源文件名及目标文件名在程序运行后根据提示输入
    this和super
    JAVA中static的使用
    结构化异常处理 笔记
    继承和多态 笔记
    javascript 客户端验证和页面特效制作 学习笔记
    定义封装的类类型 笔记
    C# 核心编程结构Ⅱ 笔记
  • 原文地址:https://www.cnblogs.com/little-ab/p/13085312.html
Copyright © 2020-2023  润新知