c3d2-wiki/HQ%2FNetzwerk%2FPPPoE_failover.mw
2015-10-01 19:54:25 +00:00

324 lines
9.8 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[[Datei:Plitc_pppoe_failover.jpg|thumbnail|left|"serverseitiges PPPoE Failover]]
== Switch (Partitionierung) mit filter source-port ==
Der Switch "diethylether" (OBEN / mit der IP: '''.7''') hat per CLI ein [http://whp-hou4.cold.extweb.hp.com/pub/networking/software/Security-Oct2005-59906024-Chap10-Traf-Security-Filts.pdf HP ProCurve - filter source-port] Regelsatz
Dieser Regelsatz dient weitgehend zur Trennung der PPPoE Übertragung mit dem restlichen Netzwerk
* Port 1-4 dürfen nur mit Trk2 / Trk3 kommunizieren
* > Port 1 ist für das PPPoE DSL Modem
* > Port 2 (Notfall) Ratbert (generell ausgeschaltet)
* > Port 3 (für Debugzwecke zum Port-Mirroring)
* > Port 4 (Fritzbox für VoIP zum Asterisk LXC)
Der zweite Teil der Segmentierung sie wie folgt aus:
* > Port 5-8 (ist der Trunk von Trk2 & Trk3)
* > Trk2 ist freenas/storage server
* > Trk3 ist flatbert server
* (einige ) Port 9-20 und Trk1 (Port 21-24) dient der Kommunikation mit dem Switch (UNTEN / mit der IP: '''.6''') der das eigentliche HQ, über das Patchfeld, versorgt
(untagged als auch VLAN 100-105)
== PPPoE Failover Schema ==
* Der Flatbert Server hat den LXC Container: '''dropbert1''' mit der IP: '''.91''' (primärer PPPoE Dialin/Routing Container)
* Der FreeNAS/Storage Server hat die JAIL: '''dropbert2''' mit der IP: '''.92''' (backup PPPoE Dialin/Routing Container)
* Da es sich bei Flatbert um einen Linux (Debian) Server und FreeNAS/Storage um einen FreeBSD Server handelt, wird zur gegenseitigen "failover" Verständigung, innerhalb der Container, [http://www.pureftpd.org/project/ucarp ucarp] verwendet
== Funktionen der Container ==
* PPPoE Dialin ([https://wiki.debian.org/PPPoE Debian]/[https://www.freebsd.org/doc/handbook/pppoe.html FreeBSD])
* Routing ([https://www.debian.org/doc/manuals/network-administrator/ch-tcpip.html Debian]/[https://www.freebsd.org/doc/handbook/network-routing.html FreeBSD])
* NAT [https://wiki.debian.org/iptables iptables] unter Debian / [https://www.freebsd.org/doc/handbook/firewalls-ipfw.html ipfw] unter FreeBSD
== HOST System Einrichtung ==
=== Flatbert (Linux) ===
System auf den aktuellen Stand halten
<source lang=bash>
apt-get autoclean; apt-get clean; apt-get update; apt-get upgrade
</source>
Umgebungs-/Debugtools installieren
<source lang=bash>
apt-get install git iptables tcpdump sockstat iputils-ping
</source>
Kernelmodule laden
<source lang=bash>
vi /etc/modules
### pppoe routing // ###
pppoe
ip_tables
ip6_tables
ip6t_MASQUERADE
## ("pkttype" packet type match support) filter multicast
xt_pkttype
tun
### // pppoe routing ###
modprobe pppoe ip_tables ip6_tables ip6t_MASQUERADE xt_pkttype tun
</source>
Container erstellen
<source lang=bash>
lxc-fancy create
</source>
Container stoppen und LXC-Container-Config anpassen (für pppoe kernel support)
<source lang=bash>
lxc-stop -n dropbert1
vi /var/lib/lxc/dropbert1/config
#// ppp/pppoe support
lxc.cgroup.devices.allow = c 108:0 rwm
lxc.mount.entry = /dev/ppp dev/ppp none bind,optional,create=file
#// lxc-to-go bridge 1
lxc.network.link=vswitch0
</source>
WICHTIG: durch das Flatbert Netzwerkschema muss! vswitch1 nach vswitch0 umgeschrieben werden, damit „dropbert1“ direkt über die erste Bridge angebunden wird und nicht an der zweiten Bridge, die ProxyARP/ProxyNDP verwendet!
=== FreeNAS/Storage (FreeBSD) ===
Da wir zunächst ein „Buildenvironment“ benötigen, erstellen wir uns über die FreeNAS Web GUI eine Jail mit der Bezeichnung „buildbert“
„buildbert“ Container: login
<source lang=bash>
jls
JID IP Address Hostname Path
1 - buildbert /mnt/zroot/jails/buildbert
jexec 1 /bin/sh
</source>
„buildbert“ Container: auf den aktuellsten Stand bringen
<source lang=bash>
pkg update; pkg upgrade
</source>
„buildbert“ Container: FreeNAS (9.3) selbst bauen, dazu bitte der Anleitung unter [https://github.com/freenas/freenas github.com/freenas/freenas] folgen
WICHTIG: damit nun die NetGraph PPP/PPPoE Module mitgebaut werden, müssen folgende Zeilen, in der Konfig, angepasst werden, siehe Zeilennummer:
<source lang=bash>
vi /mnt/zroot/jails/buildbert/buildbert/freenas/build/nano_env
159 add_nano_modules netgraph/ppp netgraph/pppoe netgraph/nat netgraph/car netgraph/echo
166 add_nano_modules netgraph/ether netgraph/socket netgraph/ppp netgraph/pppoe netgraph/nat netgraph/car netgraph/echo
339 #WITHOUT_PPP=true
</source>
sofern der „make release“ abgeschlossen wurde, können die benötigten Kernelmodule ins FreeNAS System kopiert und geladen werden
<source lang=bash>
cp /mnt/zroot/jails/buildbert/buildbert/freenas/objs/os-base/amd64/buildbert/freenas/FreeBSD/src/sys/FREENAS.amd64/modules/buildbert/freenas/FreeBSD/src/sys/modules/netgraph/ppp/ng_ppp.ko /boot/kernel
cp /mnt/zroot/jails/buildbert/buildbert/freenas/objs/os-base/amd64/buildbert/freenas/FreeBSD/src/sys/FREENAS.amd64/modules/buildbert/freenas/FreeBSD/src/sys/modules/netgraph/pppoe/ng_pppoe.ko /boot/kernel
cp /mnt/zroot/jails/buildbert/buildbert/freenas/objs/os-base/amd64/buildbert/freenas/FreeBSD/src/sys/FREENAS.amd64/modules/buildbert/freenas/FreeBSD/src/sys/modules/netgraph/nat/ng_nat.ko /boot/kernel
cp /mnt/zroot/jails/buildbert/buildbert/freenas/objs/os-base/amd64/buildbert/freenas/FreeBSD/src/sys/FREENAS.amd64/modules/buildbert/freenas/FreeBSD/src/sys/modules/netgraph/car/ng_car.ko /boot/kernel
cp /mnt/zroot/jails/buildbert/buildbert/freenas/objs/os-base/amd64/buildbert/freenas/FreeBSD/src/sys/FREENAS.amd64/modules/buildbert/freenas/FreeBSD/src/sys/modules/netgraph/echo/ng_echo.ko /boot/kernel
</source>
Download PLITC: [https://blog.plitc.eu/downloads/freenas/freenas_9.3_amd64_netgraph_pppoe.tar.gz freenas_9.3_amd64_netgraph_pppoe.tar.gz]*
<source lang=bash>
MD5 (freenas_9.3_amd64_netgraph_pppoe.tar.gz) = 0be216df688c0ba9257fbbfe7a910a6b
</source>
*Download ohne Gewähr
NetGraph Kernelmodule laden
<source lang=bash>
kldstat
kldload ng_ppp ng_pppoe ng_socket ng_nat ng_car ng_echo
kldstat
</source>
damit auch die NetGraph Module bei einem Systemstart mitgeladen werden, müssen über die FreeNAS Web GUI, ein paar Tunables gesetzt werden
'''System -> Tunables'''
###
Wichtig ist ebenso die „pfil“ Einträge zu setzen! sonst werden die PPPoE Pakete, auf der FreeNAS Bridge, gedroppt!
<source lang=bash>
</source>
<source lang=bash>
</source>
<source lang=bash>
</source>
<source lang=bash>
</source>
<source lang=bash>
</source>
<source lang=bash>
</source>
<source lang=bash>
</source>
<source lang=bash>
</source>
== Container Einrichtung ==
=== LXC: dropbert1 ===
„dropbert1“ Container: starten und einloggen
<source lang=bash>
lxc-start -n dropbert1
lxc-attach -n dropbert1
</source>
Der Container sollte automatisch per DHCP eine IP Adresse zugewiesen bekommen.
„dropbert1“ Container: ucarp und pppoeconf installieren
<source lang=bash>
apt-get autoclean; apt-get clean; apt-get update; apt-get upgrade
apt-get install ucarp pppoeconf
</source>
„dropbert1“ Container: pppoe einrichten
<source lang=bash>
pppoeconf
</source>
„dropbert1“ Container: Netzwerk Interface Konfiguration
<source lang=bash>
vi /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet manual
pre-up ifconfig eth0 up
post-down ifconfig eth0 down
auto eth1
iface eth1 inet static
address 172.22.99.91
netmask 255.255.255.0
gateway 172.22.99.4
up /usr/sbin/ucarp -i eth1 -f daemon -B -p TOPSECRET -P -z -u /usr/share/ucarp/vip-up -d /usr/share/ucarp/vip-down -b 1 -k 1 -s 172.22.99.91 -a 172.22.99.4 -v 1
up ping -S 172.22.99.4 -c 2 -q 172.22.99.7
down pkill ucarp
# The carp network interface, on top of eth0
iface eth1:ucarp inet static
#/ address 172.22.99.90
address 172.22.99.4
netmask 255.255.255.0
auto dsl-provider
iface dsl-provider inet ppp
pre-up /bin/ip link set eth0 up # line maintained by pppoeconf
provider dsl-provider
# EOF
</source>
„dropbert1“ Container: damit nach dem failover Moduswechsel (von BACKUP auf MASTER) auch der tatsächliche Switch die neue MAC Adresse zur virtuellen (virtual shared) IP erhält, wird das ucarp-up Skript angepasst indem man einfach ein Ping anschließend senden lässt
<source lang=bash>
vi /usr/share/ucarp/vip-up
#!/bin/sh
# /sbin/ifup $1:ucarp
/sbin/ifup eth1:ucarp
sleep 1 && ping -S 172.22.99.4 -c 2 -q 172.22.99.7
</source>
„dropbert1“ Container: /etc/sysctl.conf & /etc/rc.local anpassen
<source lang=bash>
vi /etc/sysctl.conf
### ### ### ROUTING // ### ### ###
net.ipv4.conf.all.forwarding=1
net.ipv6.conf.eth0.accept_ra=0
### ### ### // ROUTING ### ### ###
# EOF
</source>
<source lang=bash>
vi /etc/rc.local
#!/bin/sh
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
#
### ### ### C3D2 // ### ### ###
#/ echo "stage0"
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
ip6tables -F
ip6tables -X
ip6tables -t nat -F
ip6tables -t nat -X
ip6tables -t mangle -F
ip6tables -t mangle -X
ip6tables -P INPUT ACCEPT
ip6tables -P FORWARD ACCEPT
ip6tables -P OUTPUT ACCEPT
#/ echo "stage1"
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
sysctl net.ipv4.conf.default.forwarding=1 > /dev/null 2>&1
sysctl net.ipv4.conf.eth0.forwarding=1 > /dev/null 2>&1
exit 0
### ### ### C3D2 // ### ### ###
# EOF
</source>
Sofern ich an dieser Stelle nichts nennenswertes vergessen habe zu erwähnen, sollte nach einem Container Neustart die PPPoE Einwahl und das Routing schon funktionieren
=== JAIL: dropbert2 ===
<source lang=bash>
</source>
#