-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbridge.sh
executable file
·191 lines (159 loc) · 5.55 KB
/
bridge.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
#!/bin/bash
# ルーター3つを接続
# ルーターそれぞれにブリッジを接続
# 各ブリッジにノード2つずつ接続
#
# 1.1.1.0/24
# rt1 <--> netnsbr1|<--> ns1
# | |
# | |<--> ns2
# 2.1.1.0/24 |
# | 1.1.2.0/24
# rt2 <--> netnsbr2|<--> ns3
# | |
# | |<--> ns4
# 2.1.2.0/24 |
# | 1.1.3.0/24
# rt3 <--> netnsbr3|<--> ns5
# |
# |<--> ns6
# IPアドレス
# rt1 en1 2.1.1.1
# rt2 en2 2.1.1.2
# rt2 en1 2.1.2.1
# rt3 en2 2.1.2.2
# rt1 en0 1.1.1.254 --> netnsbr1en0
# ns1 eth0 1.1.1.1 --> netnsbr1en1
# ns2 eth0 1.1.1.2 --> netnsbr1en2
# rt2 en0 1.1.2.254 --> netnsbr2en0
# ns3 eth0 1.1.2.1 --> netnsbr2en1
# ns4 eth0 1.1.2.2 --> netnsbr2en2
# rt3 en0 1.1.3.254 --> netnsbr3en0
# ns5 eth0 1.1.3.1 --> netnsbr3en1
# ns6 eth0 1.1.3.2 --> netnsbr3en2
# root権限確認
if [ "$(id -u)" != "0" ]; then
echo "このスクリプトはroot権限で実行する必要があります" 1>&2
exit 1
fi
# ノード作成
for i in {1..6}; do
ip netns add ns$i
ip netns exec ns$i ip link set dev lo up
[ $i -gt 3 ] && continue
ip netns add rt$i
ip netns exec rt$i ip link set dev lo up
ip link add netnsbr$i type bridge
ip link set netnsbr$i up
done
# 接続
# rt1 <--> rt2
ip link add en1 netns rt1 type veth peer en2 netns rt2
ip netns exec rt1 ip address add 2.1.1.1/24 dev en1
ip netns exec rt1 ip link set dev en1 up
ip netns exec rt2 ip address add 2.1.1.2/24 dev en2
ip netns exec rt2 ip link set dev en2 up
# rt2 <--> rt3
ip link add en1 netns rt2 type veth peer en2 netns rt3
ip netns exec rt2 ip address add 2.1.2.1/24 dev en1
ip netns exec rt2 ip link set dev en1 up
ip netns exec rt3 ip address add 2.1.2.2/24 dev en2
ip netns exec rt3 ip link set dev en2 up
# rt1 <--> netnsbr1
ip link add en0 netns rt1 type veth peer netnsbr1en0
ip netns exec rt1 ip address add 1.1.1.254/24 dev en0
ip netns exec rt1 ip link set dev en0 up
ip link set netnsbr1en0 master netnsbr1
ip link set netnsbr1en0 up
# rt2 <--> netnsbr2
ip link add en0 netns rt2 type veth peer netnsbr2en0
ip netns exec rt2 ip address add 1.1.2.254/24 dev en0
ip netns exec rt2 ip link set dev en0 up
ip link set netnsbr2en0 master netnsbr2
ip link set netnsbr2en0 up
# rt3 <--> netnsbr3
ip link add en0 netns rt3 type veth peer netnsbr3en0
ip netns exec rt3 ip address add 1.1.3.254/24 dev en0
ip netns exec rt3 ip link set dev en0 up
ip link set netnsbr3en0 master netnsbr3
ip link set netnsbr3en0 up
# ns1 <--> netnsbr1
ip link add eth0 netns ns1 type veth peer netnsbr1en1
ip netns exec ns1 ip address add 1.1.1.1/24 dev eth0
ip netns exec ns1 ip link set dev eth0 up
ip link set netnsbr1en1 master netnsbr1
ip link set netnsbr1en1 up
# ns2 <--> netnsbr1
ip link add eth0 netns ns2 type veth peer netnsbr1en2
ip netns exec ns2 ip address add 1.1.1.2/24 dev eth0
ip netns exec ns2 ip link set dev eth0 up
ip link set netnsbr1en2 master netnsbr1
ip link set netnsbr1en2 up
# ns3 <--> netnsbr2
ip link add eth0 netns ns3 type veth peer netnsbr2en1
ip netns exec ns3 ip address add 1.1.2.1/24 dev eth0
ip netns exec ns3 ip link set dev eth0 up
ip link set netnsbr2en1 master netnsbr2
ip link set netnsbr2en1 up
# ns4 <--> netnsbr2
ip link add eth0 netns ns4 type veth peer netnsbr2en2
ip netns exec ns4 ip address add 1.1.2.2/24 dev eth0
ip netns exec ns4 ip link set dev eth0 up
ip link set netnsbr2en2 master netnsbr2
ip link set netnsbr2en2 up
# ns5 <--> netnsbr3
ip link add eth0 netns ns5 type veth peer netnsbr3en1
ip netns exec ns5 ip address add 1.1.3.1/24 dev eth0
ip netns exec ns5 ip link set dev eth0 up
ip link set netnsbr3en1 master netnsbr3
ip link set netnsbr3en1 up
# ns6 <--> netnsbr3
ip link add eth0 netns ns6 type veth peer netnsbr3en2
ip netns exec ns6 ip address add 1.1.3.2/24 dev eth0
ip netns exec ns6 ip link set dev eth0 up
ip link set netnsbr3en2 master netnsbr3
ip link set netnsbr3en2 up
# ルーティング
# rt1
ip netns exec rt1 sysctl -w net.ipv4.ip_forward=1 > /dev/null
ip netns exec rt1 ip route add 2.1.2.0/24 via 2.1.1.2 dev en1
ip netns exec rt1 ip route add 1.1.2.0/24 via 2.1.1.2 dev en1
ip netns exec rt1 ip route add 1.1.3.0/24 via 2.1.1.2 dev en1
# rt2
ip netns exec rt2 sysctl -w net.ipv4.ip_forward=1 > /dev/null
ip netns exec rt2 ip route add 1.1.1.0/24 via 2.1.1.1 dev en2
ip netns exec rt2 ip route add 1.1.3.0/24 via 2.1.2.2 dev en1
# rt3
ip netns exec rt3 sysctl -w net.ipv4.ip_forward=1 > /dev/null
ip netns exec rt3 ip route add 2.1.1.0/24 via 2.1.2.1 dev en2
ip netns exec rt3 ip route add 1.1.1.0/24 via 2.1.2.1 dev en2
ip netns exec rt3 ip route add 1.1.2.0/24 via 2.1.2.1 dev en2
# ns
ip netns exec ns1 ip route add default via 1.1.1.254 dev eth0
ip netns exec ns2 ip route add default via 1.1.1.254 dev eth0
ip netns exec ns3 ip route add default via 1.1.2.254 dev eth0
ip netns exec ns4 ip route add default via 1.1.2.254 dev eth0
ip netns exec ns5 ip route add default via 1.1.3.254 dev eth0
ip netns exec ns6 ip route add default via 1.1.3.254 dev eth0
# ホスト名設定
hosts=$(cat << EOF
1.1.1.254 rt1.ns
2.1.1.1 rt1.ns
1.1.2.254 rt2.ns
2.1.1.2 rt2.ns
2.1.2.1 rt2.ns
1.1.3.254 rt3.ns
2.1.2.2 rt3.ns
1.1.1.1 ns1.ns
1.1.1.2 ns2.ns
1.1.2.1 ns3.ns
1.1.2.2 ns4.ns
1.1.3.1 ns5.ns
1.1.3.2 ns6.ns
EOF
)
for i in {1..6}; do
mkdir -p /etc/netns/ns${i}
echo "${hosts}" > /etc/netns/ns${i}/hosts
done
echo "$hosts"