Unix doesn't prevent a user from doing stupid things, because that would necessarily prevent them from doing brilliant things.
while true ; do echo -n "bla" ; sleep 1 ; done
Vraag
Beste antwoord (via Demo op 18-11-2016 10:51)
Je zult dan nog wel de staat van je DHCP server moeten delen zodat de leases in je LAN geldig blijven maar dat is volgens mij wel voorzien in dhcpd.
Alle reacties
Commandline FTW | Tweakt met mate
Dat het gaat werken met spoofing op de interface weet ik en lukt me prima, maar ik zou het dus bij voorkeur via DHCP-opties doen en daar loop ik een beetje vast. Anderzijds, met wat error handling moet MAC spoofing ook goed te doen zijn.
Unix doesn't prevent a user from doing stupid things, because that would necessarily prevent them from doing brilliant things.
while true ; do echo -n "bla" ; sleep 1 ; done
Unix doesn't prevent a user from doing stupid things, because that would necessarily prevent them from doing brilliant things.
while true ; do echo -n "bla" ; sleep 1 ; done
Waarom is het trouwens zo belangrijk dat je aan de WAN kant je IP statisch houdt?
No keyboard detected. Press F1 to continue.
DNS, VPN-configs, whitelists, dit IP-adres ken ik inmiddels uit mijn hoofd.Blokker_1999 schreef op donderdag 17 november 2016 @ 12:26:
Waarom is het trouwens zo belangrijk dat je aan de WAN kant je IP statisch houdt?
Vanavond eens een mooi failover-script in elkaar knutselen
Unix doesn't prevent a user from doing stupid things, because that would necessarily prevent them from doing brilliant things.
while true ; do echo -n "bla" ; sleep 1 ; done
No keyboard detected. Press F1 to continue.
Waar ik net aan dacht, omdat je het met Debian oplost, is de vraag of je naar pfSense hebt gekeken hiervoor. Die kan het volgens mij voor je regelen.
Commandline FTW | Tweakt met mate
QnJhaGlld2FoaWV3YQ==
Je zult dan nog wel de staat van je DHCP server moeten delen zodat de leases in je LAN geldig blijven maar dat is volgens mij wel voorzien in dhcpd.
Zoals ik al aangaf, ben ik aan het hobbyen. Ik weet prima wat er wel en niet kan met DNS en ik had mijn router ook kunnen laten draaien zoals die draaide, want ik heb eigenlijk nooit ergens last van. Voor een HA-opstelling die echt werkt, is het van belang dat je TCP-sessies in sync houdt tussen de twee nodes (conntrackd) en als de tweede node dan ineens vanaf een heel ander IP-adres komt, dan heeft dat alsnog geen zin.Blokker_1999 schreef op donderdag 17 november 2016 @ 16:36:
Dat is toch echt net de reden dat ze DNS hebben uitgevonden. Zorg dat je een domeinnaam ergens hebt die je dynamisch kunt bijwerken en een scriptje dat bij verandering van ip het nieuwe ip aan je domein geeft. Die enkele keren per jaar dat mijn ip thuis veranderd ben ik binnen de 10 minuten opnieuw bereikbaar.
Een scriptje wat de API van de DNS-host aanroept op het moment dat mijn externe IP-adres toch zou veranderen is wel een leuke voor op de todo-lijst
Brahiewahiewa schreef op vrijdag 18 november 2016 @ 03:38:
Ik begrijp je probleem niet met "spoofen". Je brengt toch gewoon een virtuele interface up, op het moment dat je hebt uitgeknobbeld welke router de actieve is? En op de andere router(s) gaat diezelfde virtuele interface down
Mijn grootste probleem met MAC-spoofing is een split-brain situatie, waarbij beide routers denken actief te moeten zijn, hun MAC wijzigen in hetzelfde en ARP naar de klote gaat. Desalniettemin denk ik dat het de enige werkbare optie is en heb ik gisteravond een scriptje in elkaar geknoeid wat eigenlijk precies doet wat Bigs omschrijft. MAC aanpassen, interface up brengen en een DHCP-request op het moment dat de node Master wordt en het DHCP-proces killen, interface down brengen en het originele MAC-adres toewijzen op het moment dat de node Backup wordt. Dit weekend zal ik het script nog even postenBigs schreef op vrijdag 18 november 2016 @ 07:14:
Als je je WAN interface op beide hosts hetzelfde MAC adres geeft kun je het wel werkend maken in een passief/actief opstelling. Op je actieve host zet je de interface down. Je doet met keepalived VRRP over je LAN interface (om het gateway IP over te zetten) en daarmee zorg je dat de WAN interface up gaat en de DHCP client start zodra er een nieuwe master wordt gekozen. Het is geen naadloze overgang maar het werkt wel.
Je zult dan nog wel de staat van je DHCP server moeten delen zodat de leases in je LAN geldig blijven maar dat is volgens mij wel voorzien in dhcpd.
Ik ben vooral geïnteresseerd in de 'inner workings' en zelf iets bouwen geeft dan vaak het beste resultaatHero of Time schreef op donderdag 17 november 2016 @ 23:11:
En voor sommige dingen blijf je gewoon op IP basis werken of zijn bepaalde configs weer afhankelijk van het IP adres ipv DNS naam.
Waar ik net aan dacht, omdat je het met Debian oplost, is de vraag of je naar pfSense hebt gekeken hiervoor. Die kan het volgens mij voor je regelen.
[ Voor 8% gewijzigd door Demo op 18-11-2016 10:52 ]
Unix doesn't prevent a user from doing stupid things, because that would necessarily prevent them from doing brilliant things.
while true ; do echo -n "bla" ; sleep 1 ; done
Config is verder niet zo heel spannend. Maar voor de geïnteresseerden...
/etc/systemd/system/wan-master.service
1
2
3
4
5
6
7
8
9
10
11
12
| [Unit] Description=WAN Master After=network.target [Service] KillMode=forking RemainAfterExit=yes ExecStart=/sbin/ifup <INTERFACE> ExecStop=/sbin/ifdown <INTERFACE> [Install] WantedBy=multi-user.target |
Resources:
1
2
| pcs resource create wan_master systemd:wan-master --force --group rtr_active pcs constraint location rtr_active prefers <PRIMAIRE_SERVER>=INFINITY |
Daar bovenop heb ik nog een aantal virtual IP resources om het verkeer vanuit het lokale netwerk naar de actieve router te sturen. En nog wat andere resources voor upnp en IPv6.
Bij traditionele init-systemen waren dat soort dependencies vrij star waardoor ze eigenlijk niet geschikt waren voor veel meer dan het hele systeem starten en weer stoppen. Systemd heeft een flexibel dependency systeem dat zelf kan bedenken wat nodig is om de gewenste toestand te bereiken.
Ik klaag wel eens dat systemd te snel is met het opslokken en overdoen van bestaande functionaliteit maar op dit gebied vind ik dat ze juist te langzaam gaan. Ik verwachtte/hoopte dat ze de hele corosync/pacemaker-stack binnen de kortste keren zouden hebben herschreven en vervangen door iets wat nauw met systemd integreert. (Al hoeft dat voor mij niet in PID 1).
Wat ik aan bovenstaande idee zou veranderen/verbeteren(?) is dat ik het zou proberen te doen met systemd-networkd. Ik heb er nog geen ervaring mee dus ik kan niet zeggen of het een goed idee is of niet (en ben eerlijk gezegd een beetje bevooroordeeld tegen de dochterprojectjes van systemd) maar conceptueel is dat nog mooier.
This post is warranted for the full amount you paid me for it.
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
| vrrp_sync_group router { group { lan mgt } notify /srv/keepalived/ha-dhcp.sh } vrrp_instance lan { state MASTER interface eth1 dont_track_primary virtual_router_id 1 priority 1 garp_master_delay 1 authentication { auth_type PASS auth_pass niethetechtepasswordnatuurlijk } virtual_ipaddress { 10.10.0.200/24 10.10.0.254/24 } } vrrp_instance mgt { state MASTER interface eth2 dont_track_primary virtual_router_id 2 priority 1 authentication { auth_type PASS auth_pass ookniethetechtepassword } virtual_ipaddress { 10.10.10.30/27 } } |
Ik heb 3 interfaces: eth0 (WAN), eth1 (LAN) en eth2 (management LAN). De WAN-interface zie je in deze config verder niet terug, omdat de failover daarvan gebeurt dmv het tracking script.
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
| #!/bin/bash TYPE=$1 NAME=$2 STATE=$3 if [ -e /srv/keepalived/${NAME}.conf ] ; then . /srv/keepalived/${NAME}.conf else echo "config ${NAME} not found" exit 1 fi case $STATE in MASTER) /bin/ip route del default cat /sys/class/net/${WANIF}/address > /srv/keepalived/${WANIF}.mac /bin/ip link set dev ${WANIF} address ${MAC} /bin/ip link set dev ${WANIF} up /sbin/dhclient -v ${WANIF} exit 0 ;; BACKUP|FAULT) /sbin/dhclient -x ${WANIF} /bin/ip link set dev ${WANIF} down /bin/ip link set dev ${WANIF} address $(cat /srv/keepalived/${WANIF}.mac) /bin/ip route add default via ${GW} dev ${LANIF} exit 0 ;; *) echo "unknown state" exit 1 ;; esac |
Het script dat het up/down brengen van de WAN-interface en de DHCP-request regelt. Deze roept een config-file aan met de naam van de Keepalived sync-group. (parameter $2 die keepalived meegeeft bij het aftrappen van het script)
1
2
3
4
| MAC="52:54:de:ad:be:ef" WANIF=eth0 LANIF=eth1 GW=10.10.0.200 |
De config met het MAC-adres wat we gaan spoofen, de WAN-interface, de LAN-interface en de default gateway die we op de LAN-interface instellen als we zelf geen directe route naar het internet hebben. Anders werkt DNS-forwarding en andere communicatie richting het internet niet meer
Vragen omtrent de werking en verbeteringen aan mijn code zijn beiden welkom
Lessons learned: zoals je kan zien heeft de LAN-interface twee floating IP's. De één (.254) gebruik ik als gateway in mijn LAN, de ander (.200) als DNS-server. Ik heb 10.10.0.200/32 eveneens aan lo toegewezen, omdat de DNS-server anders niet op dat adres luistert als de router op dat moment als backup node draait. Echter, als je het adres wat je als gateway gebruikt, ook aan lo toevoegt, krijg je de meest vage verschijnselen omdat je netwerkverkeer naar je loopback-interface gerouteerd wordt
[ Voor 9% gewijzigd door Demo op 05-12-2016 20:55 ]
Unix doesn't prevent a user from doing stupid things, because that would necessarily prevent them from doing brilliant things.
while true ; do echo -n "bla" ; sleep 1 ; done