Skip to content

Instantly share code, notes, and snippets.

@taruta811
Last active February 22, 2019 02:04
Show Gist options
  • Save taruta811/e745c8874f4e4ab1a3afcbf31a4ec7de to your computer and use it in GitHub Desktop.
Save taruta811/e745c8874f4e4ab1a3afcbf31a4ec7de to your computer and use it in GitHub Desktop.
End.DX4
#!/bin/bash
##
# ping client1(192.168.1.100) to client2(192.168.2.100)
#
# eth0 eth0 eth1 eth1 eth0 eth0
# (client1) ----------- (sr1) ----------- (sr2) ---------- (client2)
# 192.168.1.100/24 192.168.2.100/24
##
# netns
ip netns add client1
ip netns add sr1
ip netns add sr2
ip netns add client2
# veth
ip link add name eth0 netns client1 type veth peer name eth0 netns sr1
ip link add name eth1 netns sr1 type veth peer name eth1 netns sr2
ip link add name eth0 netns sr2 type veth peer name eth0 netns client2
ip netns exec client1 ip link set up dev eth0
ip netns exec sr1 ip link set up dev eth0
ip netns exec sr1 ip link set up dev eth1
ip netns exec sr1 ip link set up dev lo
ip netns exec sr2 ip link set up dev eth1
ip netns exec sr2 ip link set up dev eth0
ip netns exec sr2 ip link set up dev lo
ip netns exec client2 ip link set up dev eth0
ip netns exec client1 ip address add 192.168.1.100/24 dev eth0
ip netns exec client1 ip route add default dev eth0 via 192.168.1.1
ip netns exec sr1 ip address add 192.168.1.1/24 dev eth0
ip netns exec sr1 ip -6 address add fc00::1/64 dev eth1
ip netns exec sr1 ip -6 address add fc00:1::1/128 dev lo
ip netns exec sr1 ip -6 route add fc00:2::1/128 dev eth1 via fc00::2
ip netns exec sr2 ip address add 192.168.2.1/24 dev eth0
ip netns exec sr2 ip -6 address add fc00::2/64 dev eth1
ip netns exec sr2 ip -6 address add fc00:2::1/128 dev lo
ip netns exec sr2 ip -6 route add fc00:1::1/128 dev eth1 via fc00::1
ip netns exec client2 ip address add 192.168.2.100/24 dev eth0
ip netns exec client2 ip route add default dev eth0 via 192.168.2.1
# seg6 enable
ip netns exec sr1 sysctl -w net.ipv6.conf.all.seg6_enabled=1
ip netns exec sr1 sysctl -w net.ipv6.conf.default.seg6_enabled=1
ip netns exec sr1 sysctl -w net.ipv6.conf.eth0.seg6_enabled=1
ip netns exec sr1 sysctl -w net.ipv6.conf.eth1.seg6_enabled=1
ip netns exec sr1 sysctl -w net.ipv4.conf.all.rp_filter=0
ip netns exec sr1 sysctl -w net.ipv6.conf.all.forwarding=1
ip netns exec sr1 sysctl -w net.ipv4.conf.all.forwarding=1
ip netns exec sr2 sysctl -w net.ipv6.conf.all.seg6_enabled=1
ip netns exec sr2 sysctl -w net.ipv6.conf.default.seg6_enabled=1
ip netns exec sr2 sysctl -w net.ipv6.conf.eth0.seg6_enabled=1
ip netns exec sr2 sysctl -w net.ipv6.conf.eth1.seg6_enabled=1
ip netns exec sr2 sysctl -w net.ipv4.conf.all.rp_filter=0
ip netns exec sr2 sysctl -w net.ipv6.conf.all.forwarding=1
ip netns exec sr2 sysctl -w net.ipv4.conf.all.forwarding=1
## sr1 encap, decap
# encap
ip netns exec sr1 ip route add 192.168.2.0/24 encap seg6 mode encap segs fc00:2::1 dev eth1
# decap
ip netns exec sr1 ip -6 route del local fc00:1::1 # 最初から設定されているloopback宛のlocal routeを削除
ip netns exec sr1 ip -6 route add local fc00:1::1 encap seg6local action End.DX4 nh4 192.168.1.100 dev eth0
## sr2 encap, decap
# encap
ip netns exec sr2 ip route add 192.168.1.0/24 encap seg6 mode encap segs fc00:1::1 dev eth1
# decap
ip netns exec sr2 ip -6 route del local fc00:2::1 # 最初から設定されているloopback宛のlocal routeを削除
ip netns exec sr2 ip -6 route add local fc00:2::1 encap seg6local action End.DX4 nh4 192.168.2.100 dev eth0
#!/bin/bash
##
# ping client1(192.168.1.100) to client2(192.168.3.100)
#
# eth0 eth0 eth1 eth1 eth0 eth1 eth0 eth0
# (client1) ----------- (sr1) ----------- (sr2) ---------- (router1) --------- (client2)
# 192.168.1.100/24 192.168.3.100/24
##
# netns
ip netns add client1
ip netns add sr1
ip netns add sr2
ip netns add router1
ip netns add client2
# veth
ip link add name eth0 netns client1 type veth peer name eth0 netns sr1
ip link add name eth1 netns sr1 type veth peer name eth1 netns sr2
ip link add name eth0 netns sr2 type veth peer name eth1 netns router1
ip link add name eth0 netns router1 type veth peer name eth0 netns client2
ip netns exec client1 ip link set up dev eth0
ip netns exec sr1 ip link set up dev eth0
ip netns exec sr1 ip link set up dev eth1
ip netns exec sr1 ip link set up dev lo
ip netns exec sr2 ip link set up dev eth1
ip netns exec sr2 ip link set up dev eth0
ip netns exec sr2 ip link set up dev lo
ip netns exec router1 ip link set up dev eth0
ip netns exec router1 ip link set up dev eth1
ip netns exec client2 ip link set up dev eth0
ip netns exec client1 ip address add 192.168.1.100/24 dev eth0
ip netns exec client1 ip route add default dev eth0 via 192.168.1.1
ip netns exec sr1 ip address add 192.168.1.1/24 dev eth0
ip netns exec sr1 ip -6 address add fc00::1/64 dev eth1
ip netns exec sr1 ip -6 address add fc00:1::1/128 dev lo
ip netns exec sr1 ip -6 route add fc00:2::1/128 dev eth1 via fc00::2
ip netns exec sr2 ip address add 192.168.2.1/24 dev eth0
ip netns exec sr2 ip -6 address add fc00::2/64 dev eth1
ip netns exec sr2 ip -6 address add fc00:2::1/128 dev lo
ip netns exec sr2 ip -6 route add fc00:1::1/128 dev eth1 via fc00::1
ip netns exec sr2 ip route add 192.168.3.0/24 dev eth0 via 192.168.2.100
ip netns exec router1 ip address add 192.168.2.100/24 dev eth1
ip netns exec router1 ip address add 192.168.3.1/24 dev eth0
ip netns exec router1 ip route add default dev eth1 via 192.168.2.1
ip netns exec client2 ip address add 192.168.3.100/24 dev eth0
ip netns exec client2 ip route add default dev eth0 via 192.168.3.1
# seg6 enable
ip netns exec sr1 sysctl -w net.ipv6.conf.all.seg6_enabled=1
ip netns exec sr1 sysctl -w net.ipv6.conf.default.seg6_enabled=1
ip netns exec sr1 sysctl -w net.ipv6.conf.eth0.seg6_enabled=1
ip netns exec sr1 sysctl -w net.ipv6.conf.eth1.seg6_enabled=1
ip netns exec sr1 sysctl -w net.ipv4.conf.all.rp_filter=0
ip netns exec sr1 sysctl -w net.ipv6.conf.all.forwarding=1
ip netns exec sr1 sysctl -w net.ipv4.conf.all.forwarding=1
ip netns exec sr2 sysctl -w net.ipv6.conf.all.seg6_enabled=1
ip netns exec sr2 sysctl -w net.ipv6.conf.default.seg6_enabled=1
ip netns exec sr2 sysctl -w net.ipv6.conf.eth0.seg6_enabled=1
ip netns exec sr2 sysctl -w net.ipv6.conf.eth1.seg6_enabled=1
ip netns exec sr2 sysctl -w net.ipv4.conf.all.rp_filter=0
ip netns exec sr2 sysctl -w net.ipv6.conf.all.forwarding=1
ip netns exec sr2 sysctl -w net.ipv4.conf.all.forwarding=1
ip netns exec router1 sysctl -w net.ipv4.conf.all.rp_filter=0
ip netns exec router1 sysctl -w net.ipv4.conf.all.forwarding=1
## sr1 encap, decap
# encap
ip netns exec sr1 ip route add 192.168.3.0/24 encap seg6 mode encap segs fc00:2::1 dev eth1
# decap
ip netns exec sr1 ip -6 route del local fc00:1::1
ip netns exec sr1 ip -6 route add local fc00:1::1 encap seg6local action End.DX4 nh4 192.168.1.100 dev eth0
## sr2 encap, decap
# encap
ip netns exec sr2 ip route add 192.168.1.0/24 encap seg6 mode encap segs fc00:1::1 dev eth1
# decap
ip netns exec sr2 ip -6 route del local fc00:2::1
ip netns exec sr2 ip -6 route add local fc00:2::1 encap seg6local action End.DX4 nh4 192.168.3.100 dev eth1
## default route をrouter1に向けていいのであれば、下のような設定でも動く (10.1.1.1はダミーのアドレスで実際にはどのinterfaceにも設定されていない)
# ip netns exec sr2 ip route add default dev eth0 via 192.168.2.100
# ip -6 r a local fc00:2::1 encap seg6local action End.DX4 nh4 10.1.1.1 dev lo
#補足
# ip netns exec sr2 ip -6 route add local fc00:2::1 encap seg6local action End.DX4 nh4 192.168.2.100 dev eth1
# この設定を入れた状態でclient1からclient2(192.168.3.100)にpingを打つと、192.168.2.100宛に192.168.3.100のARP requestを投げる
@taruta811
Copy link
Author

taruta811 commented Feb 21, 2019

env.sh の構成 (inner packetの宛先がSR nodeとconnectedな場合)はわりと素直に設定すれば動く
env2.sh の構成 (inner packetの宛先がSR nodeとconnectedではない場合)に同じ設定だとうまく動かないのでdirty hack
っぽい設定が要る

end.dt4があればもう少し綺麗にできるのかも

※ end functionをlocal routeとして設定しているが、SID用のtableを用意するのが正しい設定方法なのかも

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment