Revision d2b16e51 kvm-vif-bridge
b/kvm-vif-bridge | ||
---|---|---|
7 | 7 |
MAC2EUI64=/usr/bin/mac2eui64 |
8 | 8 |
NFDHCPD_STATE_DIR=/var/lib/nfdhcpd |
9 | 9 |
|
10 |
|
|
11 |
|
|
10 | 12 |
function clear_tap { |
11 |
|
|
13 |
|
|
12 | 14 |
arptables -D OUTPUT -o $INTERFACE --opcode request -j mangle >/dev/null 2>&1 |
13 | 15 |
while ip rule del dev $INTERFACE; do :; done |
14 | 16 |
iptables -D FORWARD -i $INTERFACE -p udp --dport 67 -j DROP 2>/dev/null |
... | ... | |
17 | 19 |
} |
18 | 20 |
|
19 | 21 |
function routed_setup_ipv4 { |
20 |
# get the link's default gateway |
|
21 |
gw=$GATEWAY |
|
22 | 22 |
|
23 | 23 |
# mangle ARPs to come from the gw's IP |
24 |
arptables -A OUTPUT -o $INTERFACE --opcode request -j mangle --mangle-ip-s "$gw"
|
|
24 |
arptables -A OUTPUT -o $INTERFACE --opcode request -j mangle --mangle-ip-s "$GATEWAY"
|
|
25 | 25 |
|
26 | 26 |
# route interface to the proper routing table |
27 | 27 |
ip rule add dev $INTERFACE table $TABLE |
... | ... | |
83 | 83 |
function setup_nfdhcpd { |
84 | 84 |
umask 022 |
85 | 85 |
FILE=$NFDHCPD_STATE_DIR/$INTERFACE |
86 |
#IFACE is the interface from which the packet seems to arrive |
|
87 |
#needed in bridged mode where the packets seems to arrive from the |
|
88 |
#bridge and not from the tap |
|
86 | 89 |
cat >$FILE <<EOF |
87 | 90 |
IFACE=$1 |
88 | 91 |
IP=$IP |
89 | 92 |
MAC=$MAC |
90 |
LINK=$TABLE |
|
91 | 93 |
HOSTNAME=$INSTANCE |
92 | 94 |
TAGS="$TAGS" |
93 | 95 |
EOF |
94 |
if [ -n $GATEWAY ]; then
|
|
96 |
if [ -n "$GATEWAY" ]; then
|
|
95 | 97 |
echo GATEWAY=$GATEWAY >> $FILE |
96 | 98 |
fi |
97 |
if [ -n $SUBNET ]; then
|
|
99 |
if [ -n "$SUBNET" ]; then
|
|
98 | 100 |
echo SUBNET=$SUBNET >> $FILE |
99 | 101 |
fi |
100 |
if [ -n $GATEWAY6 ]; then
|
|
102 |
if [ -n "$GATEWAY6" ]; then
|
|
101 | 103 |
echo GATEWAY6=$GATEWAY6 >> $FILE |
102 | 104 |
fi |
103 |
if [ -n $SUBNET6 ]; then
|
|
105 |
if [ -n "$SUBNET6" ]; then
|
|
104 | 106 |
echo SUBNET6=$SUBNET6 >> $FILE |
105 | 107 |
fi |
106 | 108 |
|
... | ... | |
110 | 112 |
TAP=$INTERFACE |
111 | 113 |
FROM=FROM${TAP^^} |
112 | 114 |
TO=TO${TAP^^} |
113 |
|
|
115 |
|
|
114 | 116 |
exist=$(ebtables -L | grep $TAP) |
115 |
|
|
117 |
|
|
116 | 118 |
if [ ! -z "$exist" ]; then |
117 | 119 |
ebtables -D INPUT -i $TAP -j $FROM |
118 | 120 |
ebtables -D FORWARD -i $TAP -j $FROM |
... | ... | |
132 | 134 |
ebtables -N $FROM |
133 | 135 |
# do not allow changes in ip-mac pair |
134 | 136 |
ebtables -A $FROM --ip-source \! $IP -p ipv4 -j DROP |
135 |
ebtables -A $FROM -s \! $MAC -j DROP
|
|
136 |
ebtables -A FORWARD -i $TAP -j $FROM
|
|
137 |
ebtables -A $FROM -s \! $MAC -j DROP |
|
138 |
ebtables -A FORWARD -i $TAP -j $FROM |
|
137 | 139 |
ebtables -N $TO |
138 | 140 |
ebtables -A FORWARD -o $TAP -j $TO |
139 | 141 |
#accept dhcp responses from host (nfdhcpd) |
140 | 142 |
ebtables -A $TO -p ipv4 --ip-protocol=udp --ip-destination-port=68 -j ACCEPT |
141 |
if [ $TYPE == "private" ]; then
|
|
142 |
if [ ! -z $GATEWAY ]; then
|
|
143 |
if [ "$TYPE" == "private" ]; then
|
|
144 |
if [ ! -z "$GATEWAY" ]; then
|
|
143 | 145 |
# allow packets from/to router (for masquerading |
144 |
ebtables -A $TO -s $ROUTER_MAC -j ACCEPT
|
|
145 |
ebtables -A INPUT -i $TAP -j $FROM
|
|
146 |
ebtables -A $TO -s $ROUTER_MAC -j ACCEPT |
|
147 |
ebtables -A INPUT -i $TAP -j $FROM |
|
146 | 148 |
ebtables -A OUTPUT -o $TAP -j $TO |
147 | 149 |
fi |
148 |
# allow only packets from the same mac prefix
|
|
149 |
ebtables -A $TO -s \! $MAC/$MAC_MASK -j DROP
|
|
150 |
# allow only packets from the same mac prefix |
|
151 |
ebtables -A $TO -s \! $MAC/$MAC_MASK -j DROP |
|
150 | 152 |
fi |
151 | 153 |
} |
152 | 154 |
|
153 | 155 |
|
154 |
TABLE=rt_$NETWORK |
|
155 | 156 |
|
156 |
source /var/lib/snf-network/networks/$NETWORK |
|
157 |
DEFAULT=/etc/default/snf-network |
|
158 |
source $DEFAULT |
|
159 |
source $CONF |
|
157 | 160 |
|
161 |
NODEINFRAFILE=$SHAREDDIR/infra/$(hostname) |
|
162 |
|
|
163 |
if [ -e "$NODEINFRAFILE" ]; then |
|
164 |
source $NODEINFRAFILE |
|
165 |
fi |
|
166 |
|
|
167 |
|
|
168 |
NETFILE=$SHAREDDIR/networks/$NETWORK |
|
169 |
if [ -e "$NETFILE" ]; then |
|
170 |
source $NETFILE |
|
171 |
fi |
|
158 | 172 |
|
159 | 173 |
if [ "$MODE" = "routed" ]; then |
174 |
TABLE=rt_$NETWORK |
|
160 | 175 |
# special proxy-ARP/NDP routing mode |
161 | 176 |
clear_tap |
162 | 177 |
# use a constant predefined MAC address for the tap |
... | ... | |
179 | 194 |
brctl addif $BRIDGE $INTERFACE |
180 | 195 |
setup_nfdhcpd $BRIDGE |
181 | 196 |
setup_ebtables |
182 |
fi |
|
197 |
fi |
Also available in: Unified diff