CentOS 7 mit Dual LAN/WAN und Load Balancing zu IPFire

Vodafone LTE & Vodafone DSL und IPFire kann leider kein Dual WAN.

Lösung wäre ein Router mit Dual Wan, gibt’s schon für 50 Euronen (langweilig). Außerdem kommt Squid damit nicht wirklich klar, immer wieder lange Antwortzeiten oder gar keine Verbindung.

Es muss doch auch anders gehen. Wenn IPFire hinter einem Dual Wan Router nicht klar kommt, setze ich ihn davor und mache Dual Lan.


IPFire als virtuelle Maschine auf CentOS 7 Server mit 3 Interfaces als Bridges. br0 und br1 für CentOS 7 Server / IPFire als VM zum  Vodafone GigaCube LTE, br2 zum IPFire. auf Hardwarebasis mit WLAN-AP zur Vodafone EasyBox 804 DSL. Hier können sich meine Kiddies austoben und das Inet leer saugen, da es sich um eine echte Flat mit bis zu 6 Mbit/s handelt. Die Verbindung über den GigaCube macht bis zu 150 Mbit/s und ist auf 50 GB Datenvolumen beschränkt.

Und mein erster Anlaufpunkt war diese Website!


Nach einigem testen und anpassen meiner Scripte, hab ich das ganze nun zum Laufen gebracht. Das  setzen der Routen auf meinem CentOS Server hab ich in die rc.local geschrieben und rufe von hier das Script zum setzen der Firewallregeln auf.

Hierbei geht es nicht um die Abschottung des Systems, sondern einzig und allein um die Erreichbarkeit aller Systeme und das Load Balancing zwischen LTE und DSL Leitung.

Natürlich hätte ich zum setzen der Routing- und Firewallregeln die Hauseigenen Startscripte nehmen können, aber über die rc.local war das ganze schneller und für mich einfacher zu realisieren und die Übertragbarkeit auf andere Distris ist einfacher.


#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run ‚chmod +x /etc/rc.d/rc.local‘ to ensure
# that this script will be executed during boot.

# touch /var/lock/subsys/local

# For Schleife zur Auswertung der Gewichtung des Routing
# for x in $(seq 1 20); do ip r g 1.2.3.$x; done

echo „Routen setzen … “

ip route flush cache

ip route flush table uplink1
ip route add 192.168.1.0/24 dev br0 src 192.168.1.123 table uplink1
ip rule del from 192.168.1.123 table uplink1
ip rule add from 192.168.1.123 table uplink1 prio 100
ip rule add fwmark 0x1 table uplink1 prio 101

ip route flush table uplink2
ip route add 192.168.4.0/24 dev br2 src 192.168.4.123 table uplink2
ip rule del from 192.168.4.123 table uplink2
ip rule add from 192.168.4.123 table uplink2 prio 200
ip rule add fwmark 0x2 table uplink2 prio 201

ip route delete default

ip route add default scope global nexthop via 192.168.1.110 dev br0 weight 1 nexthop via 192.168.4.110 dev br2 weight 1

# Router und Repeater hinter IPFire & IPCOP (Zweiter IPFire mit WLAN)
ip route delete 192.168.2.1
ip route add 192.168.2.1 via 192.168.4.110
ip route delete 192.168.6.1
ip route add 192.168.6.1 via 192.168.1.110
ip route delete 192.168.3.200
ip route add 192.168.3.200 via 192.168.4.110

# imap.vodafone.de Download über DSL
ip route delete 153.92.174.165
ip route add 153.92.174.165 via 192.168.4.110

# smtp.vodafone.de Upload über DSL
ip route delete 153.92.65.114
ip route add 153.92.65.114 via 192.168.4.110

#deaktivieren der Reverse Path Filter für’s Routing
for f in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 0 > $f ; done

/root/iptables


Die Tabellen werden in /etc/iproute2/rt_tables eingetragen.


#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
201 uplink1
202 uplink2


#!/bin/bash

echo „Firewall starten … “

#tools
IPTABLES=“/sbin/iptables“

###interfaces
WAN0=“br0″; WAN0_IP=“192.168.1.123″
WAN1=“br2″; WAN1_IP=“192.168.4.123″
LAN=“br0″

###clearing iptables
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
$IPTABLES -X
$IPTABLES -t nat -X
$IPTABLES -t mangle -X
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT

###nat
$IPTABLES -t nat -A POSTROUTING -o $WAN0 -j SNAT –to-source $WAN0_IP
$IPTABLES -t nat -A POSTROUTING -o $WAN1 -j SNAT –to-source $WAN1_IP

###mangle (used for load balancing)
$IPTABLES -t mangle -A POSTROUTING -o $WAN0 -m conntrack –ctstate NEW -j CONNMARK –set-mark 0x1
$IPTABLES -t mangle -A POSTROUTING -o $WAN1 -m conntrack –ctstate NEW -j CONNMARK –set-mark 0x2
$IPTABLES -t mangle -A PREROUTING -i $WAN0 -m conntrack –ctstate NEW -j CONNMARK –set-mark 0x1
$IPTABLES -t mangle -A PREROUTING -i $WAN1 -m conntrack –ctstate NEW -j CONNMARK –set-mark 0x2
$IPTABLES -t mangle -A PREROUTING -m conntrack –ctstate ESTABLISHED,RELATED -j CONNMARK –restore-mark
$IPTABLES -t mangle -A OUTPUT -m conntrack –ctstate ESTABLISHED,RELATED -j CONNMARK –restore-mark

###must have rules
$IPTABLES -A INPUT -m conntrack –ctstate ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p icmp -j ACCEPT
$IPTABLES -A INPUT -i $LAN -j ACCEPT
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A FORWARD -m conntrack –ctstate ESTABLISHED,RELATED -j ACCEPT

###internet access
$IPTABLES -A FORWARD -i $LAN -o $WAN0 ! -d 192.168.0.0/16 -j ACCEPT
$IPTABLES -A FORWARD -i $LAN -o $WAN1 ! -d 192.168.0.0/16 -j ACCEPT

router behind dualwan
$IPTABLES -A FORWARD -i $LAN -o $WAN0 ! -d 192.168.1.0/24 -j ACCEPT
$IPTABLES -A FORWARD -i $LAN -o $WAN1 ! -d 192.168.1.0/24 -j ACCEPT