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

 

posted on 2020-08-13 10:14  tycoon3  阅读(591)  评论(0编辑  收藏  举报

导航