zoukankan      html  css  js  c++  java
  • srv6 tools---SRext

    Useful links
    SRext - a Linux kernel module that implements different SR proxy behaviours.
    https://github.com/netgroup/SRv6-net-prog SERA
    - a SEgment Routing Aware Firewall. SR-iptables - an extended version of iptables userspace utility that allows adding SR-aware iptables rules. SR-snort - an SR-aware version of snort. SR-tcpdump - an SR-extended version of tcpdump able to parse SRH information.
    root@mpls2:~# sysctl -w net.ipv6.ip6t_seg6=1
    sysctl: cannot stat /proc/sys/net/ipv6/ip6t_seg6: No such file or directory
    root@mpls2:~# 
    root@mpls1:~# ip -6 rule
    0:      from all lookup local 
    32766:  from all lookup main 
    root@mpls1:~#  ip -6 route show table srv6
    root@mpls1:~# ip6tables -L -nvx
    root@mpls1:~# srconf localsid show
    
    Command 'srconf' not found, did you mean:
    
      command 'srconv' from deb csound-utils
      command 'sfconf' from deb sendfile
    root@mpls1:~# cat /etc/snort/rules/local.rule
    cat: /etc/snort/rules/local.rule: No such file or directory
    root@mpls1:~# 

     参考 https://qiita.com/makotaka/items/072158975643c045332e 和https://qiita.com/makotaka/items/072158975643c045332ehttps://blog.icttoracon.net/2019/03/21/ictsc2018-f-12/

    18.04

    # apt update 
    # apt -y install gcc make git 
    # git clone https://github.com/netgroup/SRv6-net-prog 
    # cd SRv6-net-prog/
    # git checkout 76a6d8398bfb12b801a74de71897159b0aa8ad34
    # cd srext
    # make
    # make install
    # depmod -a
    # modprobe srext

    18.10

    # apt update 
    # apt -y install gcc make git 
    # git clone https://github.com/netgroup/SRv6-net-prog 
    # cd SRv6-net-prog/srext
    # make
    # make install
    # depmod -a
    # modprobe srext
    SRv6有効化
    /etc/sysctl.conf に下記を追加
    
    
    # Alibaba CloudはデフォルトでIPv6がdisableになってるので下記4行で有効化する。AWSは不要。
    net.ipv6.conf.all.disable_ipv6=0
    net.ipv6.conf.default.disable_ipv6=0
    net.ipv6.conf.lo.disable_ipv6=0
    net.ipv6.conf.eth0.disable_ipv6 =0
    
    # Segment routing 有効化、hmacは面倒なので今は無効化
    net.ipv6.conf.all.seg6_require_hmac = 0
    net.ipv6.conf.all.seg6_enabled=1
    net.ipv6.conf.default.seg6_enabled=1
    net.ipv6.conf.eth0.seg6_enabled=1
    net.ipv6.conf.lo.seg6_enabled=1
    
    # forwarding有効化
    net.ipv4.conf.all.forwarding=1
    net.ipv6.conf.all.forwarding=1
    /etc/sysctl.conf の設定を反映させる
    
    # sysctl -p

    I. Compilation and Installation

    Clone srv6-net-prog repository in your machine:

    $ git clone https://github.com/netgroup/SRv6-net-prog 
    

    Compile srext module and CLI

    $ cd srv6-net-prog/srext/
    $ sudo make 
    make[2]: Entering directory '/root/SRv6-net-prog/srext/kernel'
    make[2]: *** /lib/modules/4.15.0-112-generic/build: No such file or directory.  Stop.
    make[2]: Leaving directory '/root/SRv6-net-prog/srext/kernel'
    Makefile:12: recipe for target 'default' failed
    make[1]: *** [default] Error 2
    make[1]: Leaving directory '/root/SRv6-net-prog/srext/kernel'
    Makefile:3: recipe for target 'default' failed
    make: *** [default] Error 2
    root@mininet-vm:~/SRv6-net-prog/srext# apt-get -y install  linux-headers-4.15.0-112-generic
    /root/SRv6-net-prog/srext/kernel/hook_v4.c: In function ‘ip6_route_input’:
    /root/SRv6-net-prog/srext/kernel/hook_v4.c:47:66: warning: passing argument 4 of ‘ip6_route_input_lookup’ makes integer from pointer without a cast [-Wint-conversion]
         skb_dst_set(skb, ip6_route_input_lookup(net, skb->dev, &fl6, skb, flags));
                                                                      ^
    In file included from /root/SRv6-net-prog/srext/kernel/hook_v4.c:17:0:
    ./include/net/ip6_route.h:70:19: note: expected ‘int’ but argument is of type ‘struct sk_buff *struct dst_entry *ip6_route_input_lookup(struct net *net,
                       ^
    /root/SRv6-net-prog/srext/kernel/hook_v4.c:47:22: error: too many arguments to function ‘ip6_route_input_lookup’
         skb_dst_set(skb, ip6_route_input_lookup(net, skb->dev, &fl6, skb, flags));
                          ^
    In file included from /root/SRv6-net-prog/srext/kernel/hook_v4.c:17:0:
    ./include/net/ip6_route.h:70:19: note: declared here
     struct dst_entry *ip6_route_input_lookup(struct net *net,
                       ^
    scripts/Makefile.build:330: recipe for target '/root/SRv6-net-prog/srext/kernel/hook_v4.o' failed
    make[3]: *** [/root/SRv6-net-prog/srext/kernel/hook_v4.o] Error 1
    Makefile:1582: recipe for target '_module_/root/SRv6-net-prog/srext/kernel' failed
    make[2]: *** [_module_/root/SRv6-net-prog/srext/kernel] Error 2
    make[2]: Leaving directory '/usr/src/linux-headers-4.15.0-112-generic'
    Makefile:12: recipe for target 'default' failed
    make[1]: *** [default] Error 2
    make[1]: Leaving directory '/root/SRv6-net-prog/srext/kernel'
    Makefile:3: recipe for target 'default' failed
    make: *** [default] Error 2

    /**
     * ip6_route_input()
     * used to input packets, after applying encap behavior, into the routing subsystem
     */
    void ip6_route_input(struct sk_buff *skb)
    {
        const struct ipv6hdr *iph = ipv6_hdr(skb);
        struct net *net = dev_net(skb->dev);
        int flags = RT6_LOOKUP_F_HAS_SADDR;
        struct flowi6 fl6 = {
            .flowi6_iif = skb->dev->ifindex,
            .daddr = iph->daddr,
            .saddr = iph->saddr,
            .flowlabel = ip6_flowinfo(iph),
            .flowi6_mark = skb->mark,
            .flowi6_proto = iph->nexthdr,
        };
    
        skb_dst_set(skb, ip6_route_input_lookup(net, skb->dev, &fl6,  flags));
        //skb_dst_set(skb, ip6_route_input_lookup(net, skb->dev, &fl6, skb, flags));
    }

    root@mininet-vm:~/SRv6-net-prog/srext# make install
    make -C kernel/ install
    make[1]: Entering directory '/root/SRv6-net-prog/srext/kernel'
    make -C /lib/modules/4.15.0-112-generic/build M=/root/SRv6-net-prog/srext/kernel modules_install
    make[2]: Entering directory '/usr/src/linux-headers-4.15.0-112-generic'
      INSTALL /root/SRv6-net-prog/srext/kernel/srext.ko
    At main.c:160:
    - SSL error:02001002:system library:fopen:No such file or directory: ../crypto/bio/bss_file.c:72
    - SSL error:2006D080:BIO routines:BIO_new_file:no such file: ../crypto/bio/bss_file.c:79
    sign-file: certs/signing_key.pem: No such file or directory
      DEPMOD  4.15.0-112-generic
    make[2]: Leaving directory '/usr/src/linux-headers-4.15.0-112-generic'
    make[1]: Leaving directory '/root/SRv6-net-prog/srext/kernel'
    make -C tools/ install
    make[1]: Entering directory '/root/SRv6-net-prog/srext/tools'
    cp ../bin/srconf /usr/bin
    make[1]: Leaving directory '/root/SRv6-net-prog/srext/tools'
    root@mininet-vm:~/SRv6-net-prog/srext# depmod -a
    root@mininet-vm:~/SRv6-net-prog/srext# modprobe srext
    root@mininet-vm:~/SRv6-net-prog/srext# srconf localsid
    Usage: srconf localsid { help | flush } 
           srconf localsid { show | clear-counters } [SID] 
           srconf localsid del SID 
           srconf localsid add SID BEHAVIOUR 
    BEHAVIOUR:= { end | 
                  end.dx2 TARGETIF | 
                  end.dx4 NEXTHOP4 TARGETIF | 
                  { end.x | end.dx6 } NEXTHOP6 TARGETIF | 
                  { end.ad4 | end.ead4 } NEXTHOP4 TARGETIF SOURCEIF | 
                  { end.am | end.ad6 | end.ead6 } NEXTHOP6 TARGETIF SOURCEIF | 
                  end.as4 NEXTHOP4 TARGETIF SOURCEIF src ADDR segs SIDLIST left SEGMENTLEFT }
                  end.as6 NEXTHOP6 TARGETIF SOURCEIF src ADDR segs SIDLIST left SEGMENTLEFT |
    NEXTHOP4:= { ip IPv4-ADDR | mac MAC-ADDR }
    NEXTHOP6:= { ip IPv6-ADDR | mac MAC-ADDR }
    root@mininet-vm:~/SRv6-net-prog/srext# 
    root@mininet-vm:~/SRv6-net-prog/srext# ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
        link/ether fa:16:3e:33:92:f5 brd ff:ff:ff:ff:ff:ff
        inet 10.10.18.156/24 brd 10.10.18.255 scope global ens3
           valid_lft forever preferred_lft forever
        inet6 fe80::f816:3eff:fe33:92f5/64 scope link 
           valid_lft forever preferred_lft forever
    root@mininet-vm:~/SRv6-net-prog/srext# srconf localsid add 2406::10 end.dx4 ip 10.0.0.70 ens3
    SREXT answers: OK.
    root@mininet-vm:~/SRv6-net-prog/srext# srconf localsid show 
    SRv6 - MY LOCALSID TABLE:
    ==================================================
             SID     :        2406::10 
             Behavior:        end.dx4 
             Next hop:        10.0.0.70 
             OIF     :        ens3 
             Good traffic:    [0 packets : 0  bytes]
             Bad traffic:     [0 packets : 0  bytes]
    ------------------------------------------------------
    
    root@mininet-vm:~/SRv6-net-prog/srext# 
    root@mininet-vm:~/SRv6-net-prog/srext# srconf localsid add 2406::10 end.dx4 ip 10.0.0.70 ens3
    SREXT answers: OK.
    root@mininet-vm:~/SRv6-net-prog/srext# srconf localsid show 
    SRv6 - MY LOCALSID TABLE:
    ==================================================
             SID     :        2406::10 
             Behavior:        end.dx4 
             Next hop:        10.0.0.70 
             OIF     :        ens3 
             Good traffic:    [0 packets : 0  bytes]
             Bad traffic:     [0 packets : 0  bytes]
    ------------------------------------------------------
    
    root@mininet-vm:~/SRv6-net-prog/srext# srconf localsid add fc00:5::bb end.ad4 ip 192.168.1.2 ens3 lo
    SREXT answers: OK.
    root@mininet-vm:~/SRv6-net-prog/srext# srconf localsid show 
    SRv6 - MY LOCALSID TABLE:
    ==================================================
             SID     :        2406::10 
             Behavior:        end.dx4 
             Next hop:        10.0.0.70 
             OIF     :        ens3 
             Good traffic:    [0 packets : 0  bytes]
             Bad traffic:     [0 packets : 0  bytes]
    ------------------------------------------------------
             SID     :        fc00:5::bb 
             Behavior:        end.ad4 
             Next hop:        192.168.1.2 
             OIF     :        ens3 
             IIF     :        lo 
             Good traffic:    [0 packets : 0  bytes]
             Bad traffic:     [0 packets : 0  bytes]
    ------------------------------------------------------
    
    root@mininet-vm:~/SRv6-net-prog/srext# 
    root@mininet-vm:~/SRv6-net-prog/srext# srconf localsid show fc00:5::bb
    SRv6 - MY LOCALSID TABLE:
    ==================================================
             SID     :        fc00:5::bb 
             Behavior:        end.ad4 
             Next hop:        192.168.1.2 
             OIF     :        ens3 
             IIF     :        lo 
             Good traffic:    [0 packets : 0  bytes]
             Bad traffic :    [0 packets : 0  bytes]
    ------------------------------------------------------
    
    root@mininet-vm:~/SRv6-net-prog/srext# 
    root@mininet-vm:~/SRv6-net-prog/srext# ip -6 r
    fe80::/64 dev ens3 proto kernel metric 256 pref medium
    root@mininet-vm:~/SRv6-net-prog/srext# 
    root@mininet-vm:~# ip route add 20.20.20.0/24 encap seg6 mode encap segs 3000::2,3000::4 dev ens3 table srv6
    
    root@mininet-vm:~# srconf localsid  add 20.20.20.0/24 encap seg6 mode encap segs 3000::2,3000::4 dev ens3 
    Error: inet6 prefix is expected rather than "20.20.20.0/24".
    root@mininet-vm:~# srconf localsid  add 20.20.20.0/24 encap seg6 mode encap segs 3000::2,3000::4 dev ens3 
    Error: inet6 prefix is expected rather than "20.20.20.0/24".
    root@mininet-vm:~# srconf localsid  add 2000:2001::1001/128 encap seg6 mode encap segs 3000::2,3000::4 dev ens3 
    Error: inet6 prefix is expected rather than "2000:2001::1001/128".
    root@mininet-vm:~# srconf localsid  add 2000:2001::1001 encap seg6 mode encap segs 3000::2,3000::4 dev ens3 
    SRv6 behavior "encap" is not supported
    root@mininet-vm:~# 
    root@mininet-vm:~/srv6_Sandbox# srconf localsid  add 2000:2001::1001 end.dx4 ip 10.10.27.18 ens3
    SREXT answers: OK.
    root@mininet-vm:~/srv6_Sandbox# ping6 2000:2001::1001
    connect: Network is unreachable
    root@mininet-vm:~/srv6_Sandbox# ip -6 r add 2000:2001::1001/128 dev ens3

    root@mininet-vm:~# ip -6 r
    2000:2001::1001 dev ens3 metric 1024 pref medium
    fe80::/64 dev ens3 proto kernel metric 256 pref medium
    root@mininet-vm:~#

    
    root@mininet-vm:~/srv6_Sandbox# ping6 2000:2001::1001
    PING 2000:2001::1001(2000:2001::1001) 56 data bytes
    From fe80::f816:3eff:fe33:92f5%ens3 icmp_seq=1 Destination unreachable: Address unreachable
    From fe80::f816:3eff:fe33:92f5%ens3 icmp_seq=2 Destination unreachable: Address unreachable
  • 相关阅读:
    指向const的指针和const指针
    c++类中的静态成员
    Vue.js图片预览插件
    vue 报错 Cannot read property '__ob__' of undefined的解决方法
    vue/webpack的一些小技巧
    css强制html不换行 css强制英文单词断行 重拾丢失的
    js将 HTML 页面生成 PDF 并下载
    Vue跨路由触发事件,Vue监听sessionStorage
    ssh 上传文件以及文件夹到linux服务器
    【原创】移动端获取用户公网ip,获取用户ip
  • 原文地址:https://www.cnblogs.com/dream397/p/13494813.html
Copyright © 2011-2022 走看看