add blog article on how to use sexy to boostrap a network
Signed-off-by: Nico Schottelius <nico@brief.schottelius.org>
This commit is contained in:
parent
624fc3883e
commit
e0015f4844
1 changed files with 173 additions and 0 deletions
173
blog/sexy-network-bootstrap.mdwn
Normal file
173
blog/sexy-network-bootstrap.mdwn
Normal file
|
@ -0,0 +1,173 @@
|
|||
[[!meta title="Bootstrapping a network with sexy"]]
|
||||
|
||||
## Introduction
|
||||
|
||||
This article will explain how to begin to manage a network
|
||||
with [[sexy|software/sexy]]. I assume you can start almost on a green field,
|
||||
if not, insert your site specific changes into the process.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
First of all, you need to have sexy installed, as described on
|
||||
the [[sexy homepage|software/sexy]]. Secondly, if you already played
|
||||
around with sexy, you should empty the sexy database, which is located
|
||||
at **~/.sexy**:
|
||||
|
||||
% rm -rf ~/.sexy
|
||||
|
||||
Or, if you are using **git** to manage your ~/.sexy directory, create a fresh
|
||||
branch, which does not contain any files:
|
||||
|
||||
% cd ~/.sexy
|
||||
% git checkout -b network_bootstrap
|
||||
|
||||
# Ensure all (committed and non-committed) files are gone
|
||||
% rm -rf db/ backend/
|
||||
% git rm -r db/ backend/
|
||||
% git commit -m "Empty sexy database"
|
||||
|
||||
|
||||
## Add the first host
|
||||
|
||||
First of all, let us add a host. Sexy wants to know its type (virtual machine
|
||||
or hardware). Sexy expects all names as fully qualified domain names (FQDNs):
|
||||
|
||||
% sexy host add -t hw katze.intern.schottelius.org
|
||||
|
||||
**Hint:** You can use the **-h** flag to get help for any command.
|
||||
Using **host list**, we can verify the host has been added:
|
||||
|
||||
% sexy host list
|
||||
katze.intern.schottelius.org
|
||||
|
||||
Now we can network cards to this host:
|
||||
|
||||
% sexy host nic-add -m 00:00:24:c8:da:bc -n eth0 katze.intern.schottelius.org
|
||||
% sexy host nic-add -m 00:00:24:c8:da:bd -n eth1 katze.intern.schottelius.org
|
||||
|
||||
## Add the network
|
||||
|
||||
In sexy, the host and net-ipv4 areas are disconnected: You can use sexy to manage
|
||||
only hosts, to manage only networks or to manage both. To allow this flexibility,
|
||||
the network part does not know about any information from the host part.
|
||||
Luckily enough, you don't need to re-enter the information, but you can retrieve
|
||||
them from the database. Currently, sexy only allows you to manage IPv4 based networks
|
||||
- IPv6 may be added in future releases. So the command to remember for now, is
|
||||
**net-ipv4**:
|
||||
|
||||
% sexy net-ipv4 add --mask 22 192.168.24.0
|
||||
% sexy net-ipv4 list
|
||||
192.168.24.0
|
||||
|
||||
Now we created the network 192.168.24.0/22.
|
||||
|
||||
## Add a host to a network
|
||||
|
||||
The previously added host, **katze.intern.schottelius.org**, is the router of
|
||||
my home network and it should use the first IPv4 address in the network.
|
||||
The **net-ipv4 host-add** command can be used to add a host:
|
||||
|
||||
% sexy net-ipv4 host-add
|
||||
usage: sexy net-ipv4 host-add [-h] [-d] [-v] -m MAC_ADDRESS -f FQDN
|
||||
[-i IPV4_ADDRESS]
|
||||
network
|
||||
|
||||
|
||||
So adding the host to a network requires giving in at least the mac address,
|
||||
which we entered before. So we can use the following line to add the host to
|
||||
our new network:
|
||||
|
||||
% host=katze.intern.schottelius.org
|
||||
% mac=$(sexy host nic-addr-get -n eth0 $host)
|
||||
% sexy net-ipv4 host-add -m $mac -f $host 192.168.24.0
|
||||
|
||||
Sexy will be default use the next free address and as this is the first host in
|
||||
the network, it used .1:
|
||||
|
||||
% sexy net-ipv4 host-ipv4-address-get 192.168.24.0 -f katze.intern.schottelius.org
|
||||
192.168.24.1
|
||||
|
||||
## Making use of the entered information
|
||||
|
||||
Sexy does not know which DNS or DHCP server you may be using.
|
||||
To implement changes to your architecture (probably using
|
||||
a software like [[cdist|software/cdist]]), sexy supports using
|
||||
**backends**.
|
||||
|
||||
For my home network, I am going to use
|
||||
[dnsmasq](http://www.thekelleys.org.uk/dnsmasq/doc.html), because the
|
||||
router is a small [Soekris net5501](http://soekris.com/net5501.htm).
|
||||
|
||||
The backends are stored in **~/.sexy/backend** and for this
|
||||
example tutorial, I will only create **~/.sexy/backend/net-ipv4/apply**:
|
||||
|
||||
% cat ~/.sexy/backend/net-ipv4/apply
|
||||
#!/bin/sh -e
|
||||
|
||||
cdist_base="/home/users/nico/p/cdist/nico"
|
||||
cdist_bin="$cdist_base/bin/cdist"
|
||||
dst_dir="$cdist_base/conf/type/__nico_router/files/dnsmasq.d"
|
||||
tmp=$(mktemp /tmp/foooooo.XXXXXXXXXXXXXXXX)
|
||||
|
||||
for network in "$@"; do
|
||||
dstfile="${dst_dir}/${network}-dhcp.conf"
|
||||
|
||||
cat << eof > "$tmp"
|
||||
# WARNING: sexy generated file, do *not* edit directly.
|
||||
eof
|
||||
|
||||
for fqdn in $(sexy net-ipv4 host-list $network); do
|
||||
mac=$(sexy net-ipv4 host-mac-address-get -f "$fqdn" "$network")
|
||||
ipv4a=$(sexy net-ipv4 host-ipv4-address-get -f "$fqdn" "$network")
|
||||
hostname=$(echo $fqdn | sed 's/\..*//')
|
||||
|
||||
line="dhcp-host=${mac},$ipv4a,$hostname"
|
||||
echo "${line}" >> "${tmp}"
|
||||
done
|
||||
|
||||
mv "${tmp}" "${dstfile}"
|
||||
eof
|
||||
done
|
||||
|
||||
cd "${dst_dir}"
|
||||
git add .
|
||||
git commit -m "Update Sexy generated network configuration" -o -- .
|
||||
echo "Transferring changes to git remote"
|
||||
git pull
|
||||
git push
|
||||
|
||||
"$cdist_bin" config -v zuhause.schottelius.org
|
||||
|
||||
This backend in essence creates the dnsmasq configuration and executes cdist afterwards
|
||||
to apply the changes.
|
||||
|
||||
## Adding more hosts
|
||||
|
||||
To make this tutorial useful and my router actually provide a dhcp
|
||||
server, I'll add my notebook and the fileserver to sexy:
|
||||
|
||||
% sexy host add -t hw loch.intern.schottelius.org
|
||||
% sexy host nic-add -m f4:6d:04:71:c5:ce loch.intern.schottelius.org
|
||||
% sexy net-ipv4 host-add -m $(sexy host nic-addr-get -n nic0 loch.intern.schottelius.org) -f loch.intern.schottelius.org 192.168.24.0
|
||||
% sexy host add -t hw brief.intern.schottelius.org
|
||||
% sexy host nic-add -m b8:8d:12:15:fd:fa brief.intern.schottelius.org
|
||||
% sexy net-ipv4 host-add -m $(sexy host nic-addr-get -n nic0 brief.intern.schottelius.org) -f brief.intern.schottelius.org 192.168.24.0
|
||||
|
||||
As you can see, if I do not specify the name of the nic, sexy automatically uses **nic0**
|
||||
for the first nic and counts up. This decision was made, as network device names vary between
|
||||
operating systems and even operating system versions.
|
||||
|
||||
|
||||
## The result
|
||||
|
||||
Using only the steps above, I've created a sexy maintained network,
|
||||
**192.168.24.0/22**, which calls [[cdist|software/cdist]] to configure
|
||||
the router with dnsmasq.
|
||||
|
||||
You can browse
|
||||
[the real sexy database](http://git.schottelius.org/?p=sexy-database;a=summary)
|
||||
created during this tutorial, as well as
|
||||
the [cdist configuration](http://git.schottelius.org/?p=cdist-nico;a=summary)
|
||||
that is used to configure the router.
|
||||
|
||||
[[!tag localch net sexy unix]]
|
Loading…
Reference in a new issue