root / hooks / group-modify-post.d / snf-network @ d2b16e51
History | View | Annotate | Download (2.8 kB)
1 | 7d163a24 | Dimitris Aragiorgis | #!/bin/bash |
---|---|---|---|
2 | 7d163a24 | Dimitris Aragiorgis | |
3 | 7d163a24 | Dimitris Aragiorgis | source /etc/default/snf-network |
4 | 7d163a24 | Dimitris Aragiorgis | |
5 | d2b16e51 | Dimitris Aragiorgis | source $CONF |
6 | 7d163a24 | Dimitris Aragiorgis | |
7 | d2b16e51 | Dimitris Aragiorgis | GROUP=$GANETI_GROUP_NAME |
8 | 7d163a24 | Dimitris Aragiorgis | ACTION=$GANETI_GROUP_NETWORK_ACTION |
9 | 7d163a24 | Dimitris Aragiorgis | NETWORK=$GANETI_GROUP_NETWORK_NAME |
10 | 7d163a24 | Dimitris Aragiorgis | MODE=$GANETI_GROUP_NETWORK_MODE |
11 | 7d163a24 | Dimitris Aragiorgis | LINK=$GANETI_GROUP_NETWORK_LINK |
12 | 7d163a24 | Dimitris Aragiorgis | |
13 | d2b16e51 | Dimitris Aragiorgis | HOSTNAME=$(hostname) |
14 | 7d163a24 | Dimitris Aragiorgis | |
15 | 7d163a24 | Dimitris Aragiorgis | NETFILE=$SHAREDDIR/networks/$NETWORK |
16 | d2b16e51 | Dimitris Aragiorgis | GROUPMAPFILE=$SHAREDDIR/mappings/$NETWORK-$GROUP |
17 | d2b16e51 | Dimitris Aragiorgis | NODEMAPFILE=$SHAREDDIR/mappings/$NETWORK-$HOSTNAME |
18 | d2b16e51 | Dimitris Aragiorgis | NODEINFRAFILE=$SHAREDDIR/infra/$HOSTNAME |
19 | 7d163a24 | Dimitris Aragiorgis | |
20 | d2b16e51 | Dimitris Aragiorgis | RT_TABLES=/etc/iproute2/rt_tables |
21 | 7d163a24 | Dimitris Aragiorgis | |
22 | d2b16e51 | Dimitris Aragiorgis | source $NODEINFRAFILE |
23 | d2b16e51 | Dimitris Aragiorgis | source $NETFILE |
24 | 7d163a24 | Dimitris Aragiorgis | |
25 | d2b16e51 | Dimitris Aragiorgis | if [ -z "$ACTION" ]; then |
26 | d2b16e51 | Dimitris Aragiorgis | exit 0 |
27 | d2b16e51 | Dimitris Aragiorgis | fi |
28 | 7d163a24 | Dimitris Aragiorgis | |
29 | 7d163a24 | Dimitris Aragiorgis | |
30 | d2b16e51 | Dimitris Aragiorgis | if [ "$ACTION" == "add" ]; then |
31 | d2b16e51 | Dimitris Aragiorgis | if [ "$MODE" == "routed" ]; then |
32 | 7d163a24 | Dimitris Aragiorgis | VLAN=$LINK |
33 | d2b16e51 | Dimitris Aragiorgis | TABLE=rt_$NETWORK |
34 | d2b16e51 | Dimitris Aragiorgis | if [ "$TYPE" == "public" ]; then |
35 | 7d163a24 | Dimitris Aragiorgis | ARP_IP=$(ipcalc $SUBNET | grep HostMax | awk '{print $2}') |
36 | 7d163a24 | Dimitris Aragiorgis | |
37 | 7d163a24 | Dimitris Aragiorgis | ip link set $VLAN up |
38 | 7d163a24 | Dimitris Aragiorgis | |
39 | 7d163a24 | Dimitris Aragiorgis | echo 1 > "/proc/sys/net/ipv4/conf/$VLAN/proxy_arp" |
40 | 7d163a24 | Dimitris Aragiorgis | |
41 | d2b16e51 | Dimitris Aragiorgis | ID=$(wc -l < $RT_TABLES) |
42 | d2b16e51 | Dimitris Aragiorgis | echo $((ID+1)) $TABLE >> $RT_TABLES |
43 | 7d163a24 | Dimitris Aragiorgis | |
44 | d2b16e51 | Dimitris Aragiorgis | ip rule add iif $VLAN table $TABLE |
45 | 7d163a24 | Dimitris Aragiorgis | |
46 | 7d163a24 | Dimitris Aragiorgis | ip route add $SUBNET dev $VLAN table main |
47 | 7d163a24 | Dimitris Aragiorgis | |
48 | d2b16e51 | Dimitris Aragiorgis | ip route add $SUBNET dev $VLAN table $TABLE |
49 | d2b16e51 | Dimitris Aragiorgis | ip route add default via $GATEWAY dev $VLAN table $TABLE |
50 | 7d163a24 | Dimitris Aragiorgis | |
51 | 7d163a24 | Dimitris Aragiorgis | echo 1 > /proc/sys/net/ipv4/conf/all/forwarding |
52 | 7d163a24 | Dimitris Aragiorgis | |
53 | 7d163a24 | Dimitris Aragiorgis | arptables -A OUTPUT -o $VLAN --opcode request -j mangle --mangle-ip-s $ARP_IP |
54 | 7d163a24 | Dimitris Aragiorgis | fi |
55 | 7d163a24 | Dimitris Aragiorgis | fi |
56 | 7d163a24 | Dimitris Aragiorgis | |
57 | 7d163a24 | Dimitris Aragiorgis | |
58 | 7d163a24 | Dimitris Aragiorgis | |
59 | d2b16e51 | Dimitris Aragiorgis | if [ "$MODE" == "bridged" ]; then |
60 | 7d163a24 | Dimitris Aragiorgis | BRIDGE=$LINK |
61 | d2b16e51 | Dimitris Aragiorgis | if [ ! -z "$GATEWAY" ]; then |
62 | d2b16e51 | Dimitris Aragiorgis | if [ "$TYPE" == "private" ]; then |
63 | d2b16e51 | Dimitris Aragiorgis | if [ "$HOSTNAME" == "$ROUTER" ]; then |
64 | 7d163a24 | Dimitris Aragiorgis | NETMASK=$(ipcalc $SUBNET | grep Netmask | awk '{print $4}') |
65 | 7d163a24 | Dimitris Aragiorgis | ip addr add $GATEWAY/$NETMASK dev $BRIDGE |
66 | 7d163a24 | Dimitris Aragiorgis | iptables -t nat -A POSTROUTING -s $SUBNET \! -d 192.168.0.0/16 -j MASQUERADE |
67 | 7d163a24 | Dimitris Aragiorgis | fi |
68 | 7d163a24 | Dimitris Aragiorgis | fi |
69 | 7d163a24 | Dimitris Aragiorgis | fi |
70 | 7d163a24 | Dimitris Aragiorgis | fi |
71 | 7d163a24 | Dimitris Aragiorgis | |
72 | d2b16e51 | Dimitris Aragiorgis | ln -sf $GROUPMAPFILE $NODEMAPFILE |
73 | 7d163a24 | Dimitris Aragiorgis | |
74 | d2b16e51 | Dimitris Aragiorgis | elif [ "$ACTION" == "remove" ]; then |
75 | d2b16e51 | Dimitris Aragiorgis | if [ ! -e "$NODEMAPFILE" ]; then |
76 | d2b16e51 | Dimitris Aragiorgis | exit 0; |
77 | d2b16e51 | Dimitris Aragiorgis | fi |
78 | 7d163a24 | Dimitris Aragiorgis | |
79 | d2b16e51 | Dimitris Aragiorgis | source $NODEMAPFILE |
80 | 7d163a24 | Dimitris Aragiorgis | |
81 | 7d163a24 | Dimitris Aragiorgis | if [ "$MODE" == "routed" ]; then |
82 | 7d163a24 | Dimitris Aragiorgis | VLAN=$LINK |
83 | 7d163a24 | Dimitris Aragiorgis | TABLE=rt_$NETWORK |
84 | d2b16e51 | Dimitris Aragiorgis | if [ "$TYPE" == "public" ]; then |
85 | 7d163a24 | Dimitris Aragiorgis | ARP_IP=$(ipcalc $SUBNET | grep HostMax | awk '{print $2}') |
86 | 7d163a24 | Dimitris Aragiorgis | |
87 | 7d163a24 | Dimitris Aragiorgis | arptables -D OUTPUT -o $VLAN --opcode request -j mangle --mangle-ip-s $ARP_IP |
88 | 7d163a24 | Dimitris Aragiorgis | |
89 | 7d163a24 | Dimitris Aragiorgis | ip route del default via $GATEWAY dev $VLAN table $TABLE |
90 | 7d163a24 | Dimitris Aragiorgis | ip route del $SUBNET dev $VLAN table $TABLE |
91 | 7d163a24 | Dimitris Aragiorgis | |
92 | 7d163a24 | Dimitris Aragiorgis | ip route del $SUBNET dev $VLAN table main |
93 | 7d163a24 | Dimitris Aragiorgis | |
94 | 7d163a24 | Dimitris Aragiorgis | ip rule del iif $VLAN table $TABLE |
95 | d2b16e51 | Dimitris Aragiorgis | |
96 | d2b16e51 | Dimitris Aragiorgis | sed -i 's/.*'"$TABLE"'$//' $RT_TABLES |
97 | 7d163a24 | Dimitris Aragiorgis | fi |
98 | 7d163a24 | Dimitris Aragiorgis | fi |
99 | 7d163a24 | Dimitris Aragiorgis | |
100 | 7d163a24 | Dimitris Aragiorgis | |
101 | 7d163a24 | Dimitris Aragiorgis | |
102 | 7d163a24 | Dimitris Aragiorgis | if [ "$MODE" == "bridged" ]; then |
103 | 7d163a24 | Dimitris Aragiorgis | BRIDGE=$LINK |
104 | d2b16e51 | Dimitris Aragiorgis | if [ ! -z "$GATEWAY" ]; then |
105 | d2b16e51 | Dimitris Aragiorgis | if [ "$TYPE" == "private" ]; then |
106 | d2b16e51 | Dimitris Aragiorgis | if [ "$HOSTNAME" == "$ROUTER" ]; then |
107 | 7d163a24 | Dimitris Aragiorgis | NETMASK=$(ipcalc $SUBNET | grep Netmask | awk '{print $4}') |
108 | 7d163a24 | Dimitris Aragiorgis | ip addr del $GATEWAY/$NETMASK dev $BRIDGE |
109 | 7d163a24 | Dimitris Aragiorgis | iptables -t nat -D POSTROUTING -s $SUBNET \! -d 192.168.0.0/16 -j MASQUERADE |
110 | 7d163a24 | Dimitris Aragiorgis | fi |
111 | 7d163a24 | Dimitris Aragiorgis | fi |
112 | 7d163a24 | Dimitris Aragiorgis | fi |
113 | 7d163a24 | Dimitris Aragiorgis | fi |
114 | 7d163a24 | Dimitris Aragiorgis | |
115 | d2b16e51 | Dimitris Aragiorgis | rm $NODEMAPFILE |
116 | 7d163a24 | Dimitris Aragiorgis | |
117 | 7d163a24 | Dimitris Aragiorgis | fi |