Bonjour,
Je partage ma configuration d'un EdgeRouter X (v2.0.8-hotfix.1) en fonctionnement double WAN failover avec une connexion FTTH Orange (sans Livebox) et une connexion FTTB RED/SFR (avec modem en mode bridge):
firewall {
all-ping enable
broadcast-ping disable
group {
network-group PRIVATE_NETS {
network 192.168.0.0/16
network 172.16.0.0/12
network 10.0.0.0/8
}
}
ipv6-receive-redirects disable
ipv6-src-route disable
ip-src-route disable
log-martians enable
modify FAILOVER {
rule 10 {
action modify
destination {
group {
network-group PRIVATE_NETS
}
}
modify {
table main
}
}
rule 20 {
action modify
destination {
group {
address-group ADDRv4_eth1.832
}
}
modify {
table main
}
}
rule 30 {
action modify
destination {
group {
address-group ADDRv4_eth2
}
}
modify {
table main
}
}
rule 110 {
action modify
modify {
lb-group WAN_FAILOVER
}
}
}
name WAN_IN {
default-action drop
description "WAN to internal"
rule 10 {
action accept
description "Allow established/related"
log disable
protocol all
state {
established enable
invalid disable
new disable
related enable
}
}
rule 20 {
action drop
description "Drop invalid state"
log disable
protocol all
state {
established disable
invalid enable
new disable
related disable
}
}
rule 30 {
action accept
description Exemple
destination {
address 192.168.0.2
port 443
}
log disable
protocol tcp
}
}
name WAN_LOCAL {
default-action drop
description "WAN to router"
rule 20 {
action accept
description "Allow established/related"
state {
established enable
related enable
}
}
rule 50 {
action drop
description "Drop invalid state"
log disable
state {
invalid enable
}
}
}
name WAN_OUT {
default-action accept
description ""
}
receive-redirects disable
send-redirects enable
source-validation disable
syn-cookies enable
}
interfaces {
ethernet eth0 {
duplex auto
speed auto
}
ethernet eth1 {
description ORANGE
duplex auto
speed auto
vif 832 {
address dhcp
description ORANGE_DATA
dhcp-options {
client-option "send vendor-class-identifier "sagem";"
client-option "send user-class "\053FSVDSL_livebox.Internet.softathome.Livebox4";"
client-option "send rfc3118-auth 00:00:00:00:00:00:00:00:00:00:00:1a:09:00:00:05:58:01:03:41:01:0d:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx;"
client-option "request subnet-mask, routers, domain-name-servers, domain-name, broadcast-address, dhcp-lease-time, dhcp-renewal-time, dhcp-rebinding-time, rfc3118-auth;"
default-route update
default-route-distance 210
global-option "option rfc3118-auth code 90 = string;"
name-server update
}
egress-qos "0:0 1:0 2:0 3:0 4:0 5:0 6:6 7:0"
firewall {
in {
name WAN_IN
}
local {
name WAN_LOCAL
}
out {
name WAN_OUT
}
}
}
}
ethernet eth2 {
address dhcp
description SFR
duplex auto
firewall {
in {
name WAN_IN
}
local {
name WAN_LOCAL
}
out {
name WAN_OUT
}
}
speed auto
}
ethernet eth3 {
duplex auto
speed auto
}
ethernet eth4 {
duplex auto
poe {
output off
}
speed auto
}
loopback lo {
}
switch switch0 {
address 192.168.0.1/24
description LAN
firewall {
in {
modify FAILOVER
}
}
mtu 1500
switch-port {
interface eth0 {
}
interface eth3 {
}
interface eth4 {
}
vlan-aware disable
}
}
}
load-balance {
group WAN_FAILOVER {
exclude-local-dns disable
flush-on-active enable
gateway-update-interval 20
interface eth1.832 {
route-test {
count {
failure 5
success 3
}
initial-delay 30
interval 10
type {
ping {
target <mettre la passerelle de la connexion>
}
}
}
weight 60
}
interface eth2 {
failover-only
route-test {
count {
failure 5
success 3
}
initial-delay 30
interval 10
type {
ping {
target <mettre la passerelle de la connexion>
}
}
}
weight 40
}
lb-local disable
lb-local-metric-change enable
transition-script /config/scripts/wan-transition
}
}
port-forward {
auto-firewall enable
hairpin-nat enable
lan-interface switch0
wan-interface eth1.832
}
protocols {
static {
}
}
service {
dhcp-server {
disabled false
hostfile-update disable
shared-network-name LAN {
authoritative disable
subnet 192.168.0.0/24 {
default-router 192.168.0.1
dns-server 192.168.0.2
lease 86400
start 192.168.0.100 {
stop 192.168.0.199
}
}
}
static-arp disable
use-dnsmasq disable
}
dns {
dynamic {
interface eth1.832 {
service dyndns {
host-name orange.domain.tld
login <login>
password ****************
server <dyndns.org>
}
web dyndns
}
interface eth2 {
service dyndns {
host-name sfr.domain.tld
login <login>
password ****************
server <dyndns.org>
}
}
}
}
gui {
http-port 80
https-port 443
listen-address 192.168.0.1
older-ciphers disable
}
nat {
rule 1 {
description Exemple_Orange
destination {
group {
address-group ADDRv4_eth1.832
}
port 443
}
inbound-interface eth1.832
inside-address {
address 192.168.0.2
port 443
}
log disable
protocol tcp
source {
}
type destination
}
rule 2 {
description Exemple_SFR
destination {
group {
address-group ADDRv4_eth2
}
port 443
}
inbound-interface eth2
inside-address {
address 192.168.0.2
port 443
}
log disable
protocol tcp
source {
}
type destination
}
rule 5001 {
description "MASQ: WAN_ORANGE"
log disable
outbound-interface eth1.832
protocol all
type masquerade
}
rule 5003 {
description "MASQ: WAN_SFR"
log disable
outbound-interface eth2
protocol all
type masquerade
}
}
ssh {
listen-address 192.168.0.1
port 22
protocol-version v2
}
unms {
disable
}
}
system {
conntrack {
expect-table-size 4096
hash-size 4096
table-size 32768
tcp {
half-open-connections 512
loose disable
max-retrans 3
}
}
host-name ubnt
}
name-server 192.168.0.2
ntp {
server 0.ubnt.pool.ntp.org {
}
server 1.ubnt.pool.ntp.org {
}
server 2.ubnt.pool.ntp.org {
}
server 3.ubnt.pool.ntp.org {
}
}
offload {
hwnat enable
ipsec enable
}
syslog {
global {
facility all {
level notice
}
facility protocols {
level warning
}
}
}
time-zone Europe/Paris
}
J'ai laissé un exemple de NAT (les règles doivent être doublées, une par interface WAN) et filtrage pare-feu pour le SSH, ainsi que la configuration DynDNS (un sous-domaine par connexion, pour un domaine dont la résolution bascule automatiquement, voir le script wan-transition). La bascule se fait en moins de 10 secondes, idem pour le retour sur le lien primaire, l'IP en DynDNS est bien mise à jour en même temps.
Pour info:
switch0: LAN (eth0, eth3, eth4)
eth1: WAN Orange
eth2: WAN SFR
Je me suis basé sur la conf de zoc (merci à lui). N'hésitez pas si vous avez des soucis au moment de tester cette conf.
Ci-joint le binaire dhclient3 pour ER-X sous firmware 2.x, à placer dans /sbin et lancer un "chmod a+x dhclient3" (droits d'exécution pour tous) et "chown root:root dhclient3" (root doit en être propritétaire).
Et le script /config/scripts/wan-transition qui me sert pour des notifications de bascule de lien:
#!/bin/bash
GROUP=$1
INTF=$2
STATUS=$3
MYLOG="/var/log/wan-transition.log"
TS=$(date +"%Y%m%d-%T")
run=/opt/vyatta/bin/vyatta-op-cmd-wrapper
INTFDSCR=$($run show interfaces | grep $INTF | awk '{print $4}')
#/usr/sbin/conntrack -F
#/usr/sbin/ubnt-add-connected.pl
case "$STATUS" in
active)
msg="$TS: Internet connection $GROUP:$INTF:$INTFDSCR is active."
/config/scripts/dynhost 2>&1 | logger &
/config/scripts/gotify "Router $(hostname) WAN fail-over event" "$msg" &
;;
inactive)
msg="$TS: Internet connection $GROUP:$INTF:$INTFDSCR is inactive."
;;
failover)
msg="$TS: Internet connection $GROUP:$INTF:$INTFDSCR is failover."
;;
*)
msg="$TS: Oh crap, $GROUP:$INTF:$INTFDSCR going [$STATUS]"
;;
esac
echo $msg >> $MYLOG
logger $msg
exit 0
Le script /config/scripts/gotify qui est utilisé (je recommande Gotify si vous voulez envoyer des notifications vers un smartphone sans avoir de limites comme c'est le cas avec Pushbullet et cie):
#!/bin/bash
APP_TOKEN=<token>
sleep 10
curl "http://gotify.domain.tld/message?token=$APP_TOKEN" \
-F "title=$1" \
-F "message=$2" \
-F "priority=5"
Et le script de mise à jour d'entrée DNS (dans mon cas j'utilise DynHost de OVH):
#!/bin/sh
SCRIPT_PATH='/config/scripts'
NSSERVER='8.8.8.8'
HOST='domain.tld'
LOGIN='login'
PASSWORD='password'
ENTRYPOINT='https://www.ovh.com/nic/update'
getip() {
IP=`curl -s http://ifconfig.me/ip`
OLDIP=`dig +short $HOST @$NSSERVER`
}
getip
if [ "$IP" ]; then
echo "[`date '+%Y-%m-%d %H:%M:%S'`] Old IP is ${OLDIP}"
echo "[`date '+%Y-%m-%d %H:%M:%S'`] New IP is ${IP}"
if [ "$OLDIP" != "$IP" ]; then
echo "[`date '+%Y-%m-%d %H:%M:%S'`] Update is needed…"
curl -s -S -u "${LOGIN}:${PASSWORD}" "${ENTRYPOINT}?system=dyndns&hostname=${HOST}&myip=${IP}" 2>&1 1> /dev/null
else
echo "[`date '+%Y-%m-%d %H:%M:%S'`] No update required."
fi
else
echo "[`date '+%Y-%m-%d %H:%M:%S'`] WAN IP not found. Exiting!"
fi