/usr/sbin/fai-mk-network is in fai-server 5.0.3ubuntu1.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
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 | #! /bin/bash
#*********************************************************************
#
# fai-mk-network -- setup a test network for FAI
#
# This script is part of FAI (Fully Automatic Installation)
# (c) 2015 by Thomas Lange, lange@informatik.uni-koeln.de
# Universitaet zu Koeln
#
#*********************************************************************
PATH=/sbin:/bin:/usr/sbin:/usr/bin
tapnum=9 # how many tap devies will be created
brip=192.168.33.1 # IP of bridge device
brname=br0
netdev=eth0 # network device used for routing to the outside internet
usage() {
cat <<EOF
fai-mk-network, setup a test network for FAI
Copyright (C) 2015 by Thomas Lange
Usage: fai-mk-network {OPTIONS} USER
-r Remove the network setup.
-P Do not put the bridge into a private network
DESCRIPTION
fai-mk-network creates $tapnum tap devices which are added to a software bridge.
The tap devices will belong to the user specified. This bridge will be on a
private subnet ($brip/24) unless -P is specified. Also a NATing is enabled for
the private subnet. Using -P the bridge will use the network of $netdev instead
of a private subnet. Do not call this command in a network mounted directory
when using -P. You can configure different settings by modifying some variables
in the script itself.
Using fai-kvm(1) you can start virtual machines which are connected
to one of the tap devices.
EOF
exit 0
}
mk_tap_devices() {
for i in $(eval echo {1..$tapnum}); do
[ -f /sys/class/net/tap$i/address ] && continue
ip tuntap add dev tap$i mode tap user $user
# when mixing tap devices and a real eth0 into a bridge, the
# ethernet device should alsways have the lowest MAC address.
# A bridge always uses the smallest/lowest MAC address when
# doing dhcp requests. Make sure the tap devices have a high MAC address
# change MAC address, so it begins with fX:
mac=`sed -e 's/^./f/' /sys/class/net/tap$i/address`
ip link set tap$i address $mac
done
}
mk_bridge() {
if [ $private -eq 0 ]; then
dhclient -r $netdev
ip addr flush $netdev # remove IP address of real nic
ip link set $netdev down
ip link set $netdev name r$netdev
brname=$netdev # use name of NIC for bridge
fi
brctl addbr $brname
ip link set $brname up
if [ $private -eq 0 ]; then
brctl addif $brname r$netdev
ip link set r$netdev up
dhclient -v $netdev
else
ip addr add $brip/24 brd + dev $brname
fi
for i in $(eval echo {1..$tapnum}); do
[ -f /sys/class/net/tap$i/address ] || continue
brctl addif $brname tap$i # add device to the bridge
ip link set tap$i up
done
}
rm_bridge() {
for i in $(eval echo {1..$tapnum}); do
[ -f /sys/class/net/tap$i/address ] || continue
brctl delif $brname tap$i
ip link set tap$i down
ip tuntap del dev tap$i mode tap
done
if [ $private -eq 0 ]; then
brname=$netdev # use name of NIC for bridge
dhclient -r $netdev
brctl delif $brname r$netdev
fi
ip link set $brname down
ip addr flush $brname
brctl delbr $brname
if [ $private -eq 1 ]; then
iptables -t nat -D POSTROUTING -o $netdev -j MASQUERADE
sysctl -w net.ipv4.ip_forward=0
else
ip link set r$netdev down
ip link set r$netdev name $netdev
ip link set $netdev up
dhclient -v $netdev
fi
exit 0
}
remove=0
private=1 # private network by default
while getopts Phr opt ; do
case "$opt" in
r) remove=1;;
P) private=0 ;;
h) usage ;;
esac
done
shift $(($OPTIND - 1))
if [ $(id -u) != "0" ]; then
echo "You must run this program as root."
echo
usage
fi
if [ ! -x "$(which brctl)" ]; then
echo "brctl not found. Please install bridge-utils."
exit 3
fi
if [ $remove -eq 1 ]; then
rm_bridge
fi
if [ -z "$1" ]; then
echo "Please add a user name which will own the tap devices."
echo ""
usage
fi
user=$1
mk_tap_devices
mk_bridge
# enable forward IP and do NATing
if [ $private -eq 1 ]; then
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -I POSTROUTING -o $netdev -j MASQUERADE
fi
# entry for /etc/network/interfaces:
# auto br0
# iface br0 inet static
# address 192.168.33.1
# netmask 255.255.255.0
# bridge_ports regex (tap).*
|