Hej,
Zastanawiam sie czy ktos z Was ma madrzejszy sposob na przeladowania iptables.
Aktualnie mam tak, ze w momencie przeladowania wykonywane jest iptables -F -t nat, FORWARD itd a nastepnie tworzone na nowo i dodawane poszczegolne komputery. Dziala to tak od lat, ale niestety ma swoj mankament. Podczas przeladowania klienci "traca" internet na kilka-kilkanascie sekund (w zaleznosci od ilosci wpisow w iptables). O ile przeladowania odbywaja sie raz dziennie to nie ma to wiekszego problemu, ale jak sa czesciej (tak jak u mnie) to zaczyna to byc dla klientow uciazliwe.
Zoptymalizowalem regulki juz dosyc mocno, korzystam z ipset i ten czas znaczaco sie zmniejszyl, ale nadal wystepuje. Macie na to jakies rozwiazanie? ;)
Pozdrawiam
W dniu 25.06.2012 14:16, Sławomir Paszkiewicz napisał(a):
Hej,
Cześć.
Zastanawiam sie czy ktos z Was ma madrzejszy sposob na przeladowania iptables.
Aktualnie mam tak, ze w momencie przeladowania wykonywane jest iptables -F -t nat, FORWARD itd a nastepnie tworzone na nowo i dodawane poszczegolne komputery. Dziala to tak od lat, ale niestety ma swoj mankament. Podczas przeladowania klienci "traca" internet na kilka-kilkanascie sekund (w zaleznosci od ilosci wpisow w iptables). O ile przeladowania odbywaja sie raz dziennie to nie ma to wiekszego problemu, ale jak sa czesciej (tak jak u mnie) to zaczyna to byc dla klientow uciazliwe.
Zoptymalizowalem regulki juz dosyc mocno, korzystam z ipset i ten czas znaczaco sie zmniejszyl, ale nadal wystepuje. Macie na to jakies rozwiazanie? ;)
Z ipset to dobry kierunek. Jeśli nie używasz jeszcze ipset swap to czas i tego zacząć używać! Tworzysz nowe zestawy IP w jakimś secie tymczasowym, następnie ipset aktualny tymczasowy, a potem ipset destroy tymczasowy
Pozdrawiam
On 25.06.2012 14:16, Sławomir Paszkiewicz wrote:
Hej,
Zastanawiam sie czy ktos z Was ma madrzejszy sposob na przeladowania iptables.
Aktualnie mam tak, ze w momencie przeladowania wykonywane jest iptables -F -t nat, FORWARD itd a nastepnie tworzone na nowo i dodawane poszczegolne komputery. Dziala to tak od lat, ale niestety ma swoj mankament. Podczas przeladowania klienci "traca" internet na kilka-kilkanascie sekund (w zaleznosci od ilosci wpisow w iptables). O ile przeladowania odbywaja sie raz dziennie to nie ma to wiekszego problemu, ale jak sa czesciej (tak jak u mnie) to zaczyna to byc dla klientow uciazliwe.
Zoptymalizowalem regulki juz dosyc mocno, korzystam z ipset i ten czas znaczaco sie zmniejszyl, ale nadal wystepuje. Macie na to jakies rozwiazanie? ;)
ja swego czasu uzywalem iptable-restore
W dniu 25 czerwca 2012 14:23 użytkownik Marcin marcin@nicram.net napisał:
W dniu 25 czerwca 2012 14:16 użytkownik Sławomir Paszkiewicz < paszczus@gmail.com> napisał:
Hej,
Zastanawiam sie czy ktos z Was ma madrzejszy sposob na przeladowania iptables.
tak, nazywa się to ipset :) zero strat pakietów przy przeładowywaniu.
No ok, ipset mam ;) tyle, ze podczas przeladowania wywoluje:
/usr/sbin/iptables -t mangle -F POSTROUTING /usr/sbin/iptables -t filter -F iptables -t mangle -F PREROUTING iptables -t mangle -F FORWARD $IPT -F FORWARD $IPT -t nat -F $IPT -F PREROUTING -t nat $IPT -F POSTROUTING -t nat
i polaczenie sie traci... tak sie teraz zastanawiam jak sie tego pozbyc, zeby bylo dobrze ;)
-- Pozdrawiam Marcin / nicraM
W dniu 25.06.2012 14:41, Sławomir Paszkiewicz napisał(a):
W dniu 25 czerwca 2012 14:23 użytkownik Marcin <marcin@nicram.net [2]> napisał:
W dniu 25 czerwca 2012 14:16 użytkownik Sławomir Paszkiewicz <paszczus@gmail.com [1]> napisał:
Hej,
Zastanawiam sie czy ktos z Was ma madrzejszy sposob na przeladowania iptables.
tak, nazywa się to ipset :) zero strat pakietów przy przeładowywaniu.
No ok, ipset mam ;) tyle, ze podczas przeladowania wywoluje:
/usr/sbin/iptables -t mangle -F POSTROUTING /usr/sbin/iptables -t filter -F iptables -t mangle -F PREROUTING iptables -t mangle -F FORWARD $IPT -F FORWARD $IPT -t nat -F $IPT -F PREROUTING -t nat $IPT -F POSTROUTING -t nat
i polaczenie sie traci... tak sie teraz zastanawiam jak sie tego pozbyc, zeby bylo dobrze ;)
Rozważ przeskoczenie na DNETMAP v2: http://cat.piasta.pl/dnetmap/?lang=pl v2 ma wsparcie dla statyczny odwzorowań wewnętrzny IP <-> zewnętrzny IP.
-- Pozdrawiam Marcin / nicraM
W dniu 25 czerwca 2012 14:16 użytkownik Sławomir Paszkiewicz < paszczus@gmail.com> napisał:
Zoptymalizowalem regulki juz dosyc mocno, korzystam z ipset i ten czas znaczaco sie zmniejszyl, ale nadal wystepuje. Macie na to jakies rozwiazanie? ;)
Jeśli korzystasz z IPset to dużo ułatwia, ja sobie zmieniłem nodeedit.php, który sprawdza czy np. zmienił się MAC czy cokolwiek innego, i generowane są na bieżąco skrypciki, np. coś takiego:
############################# # Zmieniamy MACa kompa o ID: XXX (MSGID: XXX) BYLMAC="00:40:F4:73:F3:07" MABYC="84:8F:69:BA:2B:72" ADRESIP="xxx.xxx.xxx.xxx" if [ "`/usr/local/sbin/ipset -T TychWpuszczamy ${ADRESIP},${BYLMAC}`" = "${ADRESIP},${BYLMAC} is in set TychWpuszczamy." ]; then /usr/local/sbin/ipset -D TychWpuszczamy ${ADRESIP},${BYLMAC} /usr/local/sbin/ipset -A TychWpuszczamy ${ADRESIP},${MABYC} /usr/sbin/conntrack -D -s ${ADRESIP}
RESTARTDHCP="tak" fi if [ "$RESTARTDHCP" = "tak" ] ; then /etc/init.d/lmsd reload "DHCP" fi if [ "$RESTARTHTB" = "tak" ] ; then /etc/init.d/lmsd reload "PreHTB HTB" fi if [ "$RESTARTHOSTS" = "tak" ] ; then /etc/init.d/lmsd reload "Hosts RoutingForARP VLANforARP" fi #############################
I w ten sposób mam porobione, zmiany IP (nawet pomiędzy VLANami), zmiana MACa, zmiana zobowiązania (prędkości) i dodawanie nowego komputera. Pełne przeładowanie idzie maksymalnie raz na 2 tygodnie. Ale sposobów na rozwiązanie tego jest więcej, m.in to co Tomek napisał z tymczasowymi tablicami IPset.
W dniu 25.06.2012 14:34, Skiba Marek napisał(a):
W dniu 25 czerwca 2012 14:16 użytkownik Sławomir Paszkiewicz <paszczus@gmail.com [1]> napisał:
Zoptymalizowalem regulki juz dosyc mocno, korzystam z ipset i ten czas znaczaco sie zmniejszyl, ale nadal wystepuje. Macie na to jakies rozwiazanie? ;)
Jeśli korzystasz z IPset to dużo ułatwia, ja sobie zmieniłem nodeedit.php, który sprawdza czy np. zmienił się MAC czy cokolwiek innego, i generowane są na bieżąco skrypciki, np. coś takiego:
#############################
# Zmieniamy MACa kompa o ID: XXX (MSGID: XXX) BYLMAC="00:40:F4:73:F3:07" MABYC="84:8F:69:BA:2B:72" ADRESIP="xxx.xxx.xxx.xxx" if [ "`/usr/local/sbin/ipset -T TychWpuszczamy ${ADRESIP},${BYLMAC}`" = "${ADRESIP},${BYLMAC} is in set TychWpuszczamy." ]; then /usr/local/sbin/ipset -D TychWpuszczamy ${ADRESIP},${BYLMAC} /usr/local/sbin/ipset -A TychWpuszczamy ${ADRESIP},${MABYC} /usr/sbin/conntrack -D -s ${ADRESIP}
RESTARTDHCP="tak" fi
if [ "$RESTARTDHCP" = "tak" ] ; then /etc/init.d/lmsd reload "DHCP" fi if [ "$RESTARTHTB" = "tak" ] ; then /etc/init.d/lmsd reload "PreHTB HTB" fi if [ "$RESTARTHOSTS" = "tak" ] ; then /etc/init.d/lmsd reload "Hosts RoutingForARP VLANforARP" fi
#############################
I w ten sposób mam porobione, zmiany IP (nawet pomiędzy VLANami), zmiana MACa, zmiana zobowiązania (prędkości) i dodawanie nowego komputera. Pełne przeładowanie idzie maksymalnie raz na 2 tygodnie. Ale sposobów na rozwiązanie tego jest więcej, m.in [2] to co Tomek napisał z tymczasowymi tablicami IPset.
Można użyć w LMS hook-ów związanych z dodawaniem/usuwaniem/modyfikowaniem komputerów. To pozwala wydzielić kod modyfikujący regułki QoS i firewall do zewnętrznego pluginu LMS w którym wszystko ładnie można dynamicznie dodawać/usuwać.
W dniu 25 czerwca 2012 14:34 użytkownik Skiba Marek skibamarek@gmail.comnapisał:
W dniu 25 czerwca 2012 14:16 użytkownik Sławomir Paszkiewicz < paszczus@gmail.com> napisał:
Zoptymalizowalem regulki juz dosyc mocno, korzystam z ipset i ten czas znaczaco sie zmniejszyl, ale nadal wystepuje. Macie na to jakies rozwiazanie? ;)
Jeśli korzystasz z IPset to dużo ułatwia, ja sobie zmieniłem nodeedit.php, który sprawdza czy np. zmienił się MAC czy cokolwiek innego, i generowane są na bieżąco skrypciki, np. coś takiego:
############################# # Zmieniamy MACa kompa o ID: XXX (MSGID: XXX) BYLMAC="00:40:F4:73:F3:07" MABYC="84:8F:69:BA:2B:72" ADRESIP="xxx.xxx.xxx.xxx" if [ "`/usr/local/sbin/ipset -T TychWpuszczamy ${ADRESIP},${BYLMAC}`" = "${ADRESIP},${BYLMAC} is in set TychWpuszczamy." ]; then /usr/local/sbin/ipset -D TychWpuszczamy ${ADRESIP},${BYLMAC} /usr/local/sbin/ipset -A TychWpuszczamy ${ADRESIP},${MABYC} /usr/sbin/conntrack -D -s ${ADRESIP}
RESTARTDHCP="tak" fi if [ "$RESTARTDHCP" = "tak" ] ; then /etc/init.d/lmsd reload "DHCP" fi if [ "$RESTARTHTB" = "tak" ] ; then /etc/init.d/lmsd reload "PreHTB HTB" fi if [ "$RESTARTHOSTS" = "tak" ] ; then /etc/init.d/lmsd reload "Hosts RoutingForARP VLANforARP" fi #############################
Moglbys podeslac te zmiany w nodeedit.php jako patch, albo po prostu caly plik? dzieki ;-)
I w ten sposób mam porobione, zmiany IP (nawet pomiędzy VLANami), zmiana MACa, zmiana zobowiązania (prędkości) i dodawanie nowego komputera. Pełne przeładowanie idzie maksymalnie raz na 2 tygodnie. Ale sposobów na rozwiązanie tego jest więcej, m.in to co Tomek napisał z tymczasowymi tablicami IPset.
W dniu 25 czerwca 2012 15:05 użytkownik Sławomir Paszkiewicz < paszczus@gmail.com> napisał:
Moglbys podeslac te zmiany w nodeedit.php jako patch, albo po prostu caly plik? dzieki ;-)
Coś takiego mam np.:
#################### nodeedit.php: #################### if($nodeinfo['mac'] != $nodeedit['mac']) { $subject = 'Zmienił się adres MAC komputera ('.$nodeedit['id'].')'; $body = 'Było: '.$nodeinfo['mac'].', zostało zmienione na: '.$nodeedit['mac']; $LMS->AddLogMessages($customerid, $subject, $body); $LMS->ZmianaMAC($nodeinfo['mac'], $nodeedit['mac'], $nodeinfo['ip']); } // najpierw zmieniamy maca pozniej IP, wiec do zmiany IP korzystamy juz z nowego MACa if($nodeinfo['ip'] != $nodeedit['ipaddr']) { $subject = 'Zmienił się adres IP komputera ('.$nodeedit['id'].')'; $body = 'Było: '.$nodeinfo['ip'].', zostało zmienione na: '.$nodeedit['ipaddr']; $LMS->AddLogMessages($customerid, $subject, $body); $LMS->ZmianaAdresuIP($nodeinfo['ip'], $nodeedit['ipaddr'], $nodeedit['mac']); } ####################
#################### LMS.class.php (Przykładowa funkcja): ####################
function ZmianaMAC($bylo='', $mabyc='', $adresip='') { $msgid = $this->DB->GetLastInsertID('messages'); $nodeid = $this->GetNodeIDByIP($adresip);
$data = ' # Zmieniamy MACa kompa o ID: '.$nodeid.' (MSGID: '.$msgid.') BYLMAC="'.$bylo.'" MABYC="'.$mabyc.'" ADRESIP="'.$adresip.'" if [ "`/usr/local/sbin/ipset -T TychWpuszczamy ${ADRESIP},${BYLMAC}`" = "${ADRESIP},${BYLMAC} is in set TychWpuszczamy." ]; then /usr/local/sbin/ipset -D TychWpuszczamy ${ADRESIP},${BYLMAC} /usr/local/sbin/ipset -A TychWpuszczamy ${ADRESIP},${MABYC} /usr/sbin/conntrack -D -s ${ADRESIP} RESTARTDHCP="tak" elif [ "`/usr/local/sbin/ipset -T WpuszczaneVoipy ${ADRESIP},${BYLMAC}`" = "${ADRESIP},${BYLMAC} is in set WpuszczaneVoipy." ]; then /usr/local/sbin/ipset -D WpuszczaneVoipy ${ADRESIP},${BYLMAC} /usr/local/sbin/ipset -A WpuszczaneVoipy ${ADRESIP},${MABYC} /usr/sbin/conntrack -D -s ${ADRESIP} RESTARTDHCP="tak" fi ';
$this->DB->Execute('UPDATE daemonconfig SET value = CONCAT(value, ?) WHERE id=XXX', array($data)); }
####################
Na końcu jak widać, treść skrypciku leci do instancji, która jest wyłączona. Skrypcik poniżej na routerze łączy się co 5min do tej instancji i sprawdza czy ma coś przeładować czy nie. Nie jest to idealne rozwiązanie, przy więcej niż jednym routerze, ale przy jednym działa.
#################### Skrypcik na routerze odpalany z crontaba #################### #!/bin/bash
# Połączenie z bazą user=`cat /etc/default/lmsd | grep "LMSD_DBUSER" | sed 's/^.*"(.*)"$/\1/g'` pass=`cat /etc/default/lmsd | grep "LMSD_DBPASS" | sed 's/^.*"(.*)"$/\1/g'` database=`cat /etc/default/lmsd | grep "LMSD_DBNAME" | sed 's/^.*"(.*)"$/\1/g'` host=`cat /etc/default/lmsd | grep "LMSD_DBHOST" | sed 's/^.*"(.*)"$/\1/g'` query_skip="mysql --skip-column-names -h $host -u $user --password=$pass -D $database -e"
DAWAJDANE=`$query_skip "SELECT value FROM daemonconfig WHERE id = 168"`
if [ -n "$DAWAJDANE" ]; then # Kasujemy liste rzeczy do zrobienia `$query_skip "UPDATE daemonconfig SET value = '' WHERE id=168"`
DATA=`date "+%Y.%m.%d-%H:%M:%S"` PLIK="/router/logi/individual_reload/${DATA}.sh" LOG="/router/logi/individual_reload/${DATA}.log" echo -e "$DAWAJDANE" > "$PLIK"
# Tylko raz restartujemy DHCP na końcu (jeśli jest kilka zmian na raz) cat << "STOP" >> "$PLIK" if [ "$RESTARTDHCP" = "tak" ] ; then /etc/init.d/lmsd reload "DHCP" fi if [ "$RESTARTHTB" = "tak" ] ; then /etc/init.d/lmsd reload "PreHTB HTB" fi if [ "$RESTARTHOSTS" = "tak" ] ; then /etc/init.d/lmsd reload "Hosts RoutingForARP VLANforARP" fi STOP chmod +x "$PLIK" /bin/bash "$PLIK" > "$LOG" 2>&1
MSGID=`grep "(MSGID:" "$PLIK" | sed 's/^.*MSGID: (.*))$/\1/' | tr '\n' ', ' | sed 's/^(.*),$/\1/'` TIMESTAMP=`date "+%s"`
# Zaznaczamy, że zdarzenia zostały przeładowane `$query_skip "UPDATE messageitems SET lastdate = $TIMESTAMP, status = 2 WHERE id IN ($MSGID)"` fi ####################
W dniu 25.06.2012 15:23, Skiba Marek napisał(a):
W dniu 25 czerwca 2012 15:05 użytkownik Sławomir Paszkiewicz <paszczus@gmail.com [1]> napisał:
Moglbys podeslac te zmiany w nodeedit.php jako patch, albo po prostu caly plik? dzieki ;-)
Coś takiego mam np.:
Marku, możesz również rozważyć przeskoczenie na następujące hooki pluginowe LMS: node_add_before - Before node creation (just before executing SQL insert queries) node_add_after - After node creation node_add_init - Just before displaying nodeadd.html
node_edit_before - Before node edition (just before executing SQL update queries) node_edit_after - After node edition node_edit_init - Just before displaying nodeedit.html
node_del_before - Before node deletion (just before executing SQL delete queries) node_del_after - After node deletion
W dniu 25 czerwca 2012 15:26 użytkownik Tomasz Chiliński < tomasz.chilinski@chilan.com> napisał:
Marku, możesz również rozważyć przeskoczenie na następujące hooki pluginowe LMS: node_add_before - Before node creation (just before executing SQL insert queries) node_add_after - After node creation node_add_init - Just before displaying nodeadd.html
node_edit_before - Before node edition (just before executing SQL update queries) node_edit_after - After node edition node_edit_init - Just before displaying nodeedit.html
node_del_before - Before node deletion (just before executing SQL delete queries) node_del_after - After node deletion
Yhym, przyjże się na pewno, wygląda bardzo miło. Cały czas przechodzę z
MySQLa na PostgreSQL, i przy okazji aktualizuje LMSa, który jest mocno przerobiony, więc każdą zmianę będę musiał jeszcze raz wprowadzić i nad każdą się na nowo zastanowić czy nie można tego lepiej zrobić.
W dniu 25 czerwca 2012 15:26 użytkownik Tomasz Chiliński < tomasz.chilinski@chilan.com> napisał:
Marku, możesz również rozważyć przeskoczenie na następujące hooki pluginowe LMS:
Tomku, możesz coś więcej naświetlić o tych pluginach? bo przyznam szczerze, że pierwszy raz o tym słyszę a widzę że może być fajny ficzerek.
W dniu 25.06.2012 15:41, Marcin napisał(a):
W dniu 25 czerwca 2012 15:26 użytkownik Tomasz Chiliński <tomasz.chilinski@chilan.com [1]> napisał:
Marku, możesz również rozważyć przeskoczenie na następujące hooki pluginowe LMS:
Tomku, możesz coś więcej naświetlić o tych pluginach? bo przyznam szczerze, że pierwszy raz o tym słyszę a widzę że może być fajny ficzerek.
Marcinie, zajrzyj na początek do katalogu lib/plugins/smspasswords.php. Tam jest zawarta idea działania tego czegoś zwanego pluginami. Pozwala to odizolować logikę naszych zewnętrznych dodatków od kodu właściwego LMS. W kodzie pluginu podpinasz się pod wywoływane przez skrypty LMS hooki i w metodach obsługujących te hooki robisz na danych wejściowych co Ci się podoba.
[Monday, 25 June 2012], Sławomir Paszkiewicz napisał(a):
Hej,
Zastanawiam sie czy ktos z Was ma madrzejszy sposob na przeladowania iptables.
Ja mam swoj skrypt który: - laduje to co jest aktualnie w iptables (tc -s class show dev xxx i grepowanie perlem) - porównuje to z tym co powinno byc (wczytuje z LMS jakie wartosci maja byc dla poszcegolnych klientow) - "tc class change dev xxx ..... " jesli musi byc zmiana predkosci
Chodzi szybko, brak przerw (u mnie wszyscy klienci maja zewnetrzne IP) :)
pozdrawiam Jarek Dziubek
W dniu 25 czerwca 2012 14:54 użytkownik Jaroslaw Dziubek < yaro@perfect.net.pl> napisał:
[Monday, 25 June 2012], Sławomir Paszkiewicz napisał(a):
Hej,
Zastanawiam sie czy ktos z Was ma madrzejszy sposob na przeladowania iptables.
Ja mam swoj skrypt który:
- laduje to co jest aktualnie w iptables (tc -s class show dev xxx i
grepowanie perlem)
- porównuje to z tym co powinno byc (wczytuje z LMS jakie wartosci
maja byc dla poszcegolnych klientow)
- "tc class change dev xxx ..... " jesli musi byc zmiana predkosci
Chodzi szybko, brak przerw (u mnie wszyscy klienci maja zewnetrzne IP) :)
Ale u Ciebie to dotyka tylko zmiany predkosci. Mi zalezy na calosci. Zewnetrzne IP ma niestety tylko czesc klientow :(
pozdrawiam Jarek Dziubek -- Yaro
IRL: Jaroslaw Dziubek | "Kobieta jest człowiekiem http://yaro.perfect.net.pl/ | zanim się ją pokocha,
IRC:Yaro, ICQ:1340145, GG:1392891 | czasami również potem." | Max Frisch _______________________________________________ lms mailing list lms@lists.lms.org.pl http://lists.lms.org.pl/mailman/listinfo/lms
W dniu 25.06.2012 14:59, Sławomir Paszkiewicz napisał(a):
W dniu 25 czerwca 2012 14:54 użytkownik Jaroslaw Dziubek <yaro@perfect.net.pl [6]> napisał:
[Monday, 25 June 2012], Sławomir Paszkiewicz napisał(a):
Hej,
Zastanawiam sie czy ktos z Was ma madrzejszy sposob na
przeladowania
iptables.
Ja mam swoj skrypt który:
- laduje to co jest aktualnie w iptables (tc -s class show dev xxx
i grepowanie perlem)
- porównuje to z tym co powinno byc (wczytuje z LMS jakie wartosci
maja byc dla poszcegolnych klientow)
- "tc class change dev xxx ..... " jesli musi byc zmiana predkosci
Chodzi szybko, brak przerw (u mnie wszyscy klienci maja zewnetrzne IP) :)
Ale u Ciebie to dotyka tylko zmiany predkosci. Mi zalezy na calosci. Zewnetrzne IP ma niestety tylko czesc klientow :(
Jaką liczbą publicznych IP dysponujesz? Ile w szczycie masz maks. aktywnych urządzeń klienckich?
W dniu 25 czerwca 2012 14:59 użytkownik Sławomir Paszkiewicz < paszczus@gmail.com> napisał:
Ale u Ciebie to dotyka tylko zmiany predkosci. Mi zalezy na calosci. Zewnetrzne IP ma niestety tylko czesc klientow :(
no to zrób tak jak Tomek powiedział. nie przeładowywuj iptables a jedynie ipset. ja mam taki fragmencik kodu: function blokadareload(){ echo -en "\tPrzeladowywuje blokade ...\t" blokadaf="blokada.ip" ipsetname="blokowani" ipsetnametmp="blokowani_tmp" if [ -a "${dir}/${blokadaf}" ]; then $ips -! -N $ipsetname hash:net $ips -N $ipsetnametmp hash:net grep "^" "${dir}/${blokadaf}" | grep -v "#"| grep [0123456789] | while read IP nazwa do $ips -A $ipsetnametmp $IP done $ips -W $ipsetnametmp $ipsetname $ips -X $ipsetnametmp fi echo "OK" }
$ipt -t nat -A PREROUTING -p tcp -m set --match-set $ipsetname src -m multiport --dport 80,8080 -j DNAT --to 1.1.1.1:80
W dniu 25 czerwca 2012 15:06 użytkownik Marcin marcin@nicram.net napisał:
W dniu 25 czerwca 2012 14:59 użytkownik Sławomir Paszkiewicz < paszczus@gmail.com> napisał:
Ale u Ciebie to dotyka tylko zmiany predkosci. Mi zalezy na calosci.
Zewnetrzne IP ma niestety tylko czesc klientow :(
no to zrób tak jak Tomek powiedział. nie przeładowywuj iptables a jedynie ipset. ja mam taki fragmencik kodu: function blokadareload(){ echo -en "\tPrzeladowywuje blokade ...\t" blokadaf="blokada.ip" ipsetname="blokowani" ipsetnametmp="blokowani_tmp" if [ -a "${dir}/${blokadaf}" ]; then $ips -! -N $ipsetname hash:net $ips -N $ipsetnametmp hash:net grep "^" "${dir}/${blokadaf}" | grep -v "#"| grep [0123456789] | while read IP nazwa do $ips -A $ipsetnametmp $IP done $ips -W $ipsetnametmp $ipsetname $ips -X $ipsetnametmp fi echo "OK" }
$ipt -t nat -A PREROUTING -p tcp -m set --match-set $ipsetname src -m multiport --dport 80,8080 -j DNAT --to 1.1.1.1:80
Troche skomplikowane, ale moze cos z tego wyciagne ;)
U mnie jest tak, ze kazda podsiec z LMS ma osobnego ispet-a, np.:
$IPSET create zarejestrowani_10.10.1.0 bitmap:ip,mac range 10.10.1.0/24 $IPSET create zarejestrowani_10.10.2.0 bitmap:ip,mac range 10.10.2.0/24
do nich dopisuje komputery, np
$IPSET add $ZAREJESTROWANI $1,$2 gdzie $ZAREJESTROWANI to nazwa set-a, $1 to IP i $2 to MAC komputera
a nastepnie w iptables mam:
$IPT -A FORWARD -i eth1.101 -m set --match-set zarejestrowani_10.10.1.0 src,src -j ACCEPT $IPT -A FORWARD -i eth1.102 -m set --match-set zarejestrowani_10.10.2.0 src,src -j ACCEPT
wlasciwie to musze jakos tak przerobic te skrypty, zeby przy przeladowaniu ruszaly tylko ipset-y (destroy,create lub del/add komp ) a nie cale iptables na to wychodzi.
W dniu 25.06.2012 15:11, Sławomir Paszkiewicz napisał(a):
W dniu 25 czerwca 2012 15:06 użytkownik Marcin <marcin@nicram.net [3]> napisał:
W dniu 25 czerwca 2012 14:59 użytkownik Sławomir Paszkiewicz <paszczus@gmail.com [1]> napisał:
Ale u Ciebie to dotyka tylko zmiany predkosci. Mi zalezy na calosci. Zewnetrzne IP ma niestety tylko czesc klientow :(
no to zrób tak jak Tomek powiedział. nie przeładowywuj iptables a jedynie ipset. ja mam taki fragmencik kodu: function blokadareload(){ echo -en "tPrzeladowywuje blokade ...t" blokadaf="blokada.ip" ipsetname="blokowani" ipsetnametmp="blokowani_tmp" if [ -a "${dir}/${blokadaf}" ]; then $ips -! -N $ipsetname hash:net $ips -N $ipsetnametmp hash:net grep "^" "${dir}/${blokadaf}" | grep -v "#"| grep [0123456789] | while read IP nazwa do $ips -A $ipsetnametmp $IP done $ips -W $ipsetnametmp $ipsetname $ips -X $ipsetnametmp fi echo "OK" }
$ipt -t nat -A PREROUTING -p tcp -m set --match-set $ipsetname src -m multiport --dport 80,8080 -j DNAT --to 1.1.1.1:80 [2]
Troche skomplikowane, ale moze cos z tego wyciagne ;)
U mnie jest tak, ze kazda podsiec z LMS ma osobnego ispet-a, np.:
$IPSET create zarejestrowani_10.10.1.0 bitmap:ip,mac range 10.10.1.0/24 [4] $IPSET create zarejestrowani_10.10.2.0 bitmap:ip,mac range 10.10.2.0/24 [5]
do nich dopisuje komputery, np
$IPSET add $ZAREJESTROWANI $1,$2 gdzie $ZAREJESTROWANI to nazwa set-a, $1 to IP i $2 to MAC komputera
a nastepnie w iptables mam:
$IPT -A FORWARD -i eth1.101 -m set --match-set zarejestrowani_10.10.1.0 src,src -j ACCEPT $IPT -A FORWARD -i eth1.102 -m set --match-set zarejestrowani_10.10.2.0 src,src -j ACCEPT
wlasciwie to musze jakos tak przerobic te skrypty, zeby przy przeladowaniu ruszaly tylko ipset-y (destroy,create lub del/add komp ) a nie cale iptables na to wychodzi.
Nic nie musisz przerabiać! Twórz ipsety z nowymi zestawiamy zasobów IP jako tymczasowe, a potem ipset swap aktualny tymczasowy i ipset destroy tymczasowy.
W dniu 25 czerwca 2012 15:14 użytkownik Tomasz Chiliński < tomasz.chilinski@chilan.com> napisał:
W dniu 25.06.2012 15:11, Sławomir Paszkiewicz napisał(a):
W dniu 25 czerwca 2012 15:06 użytkownik Marcin <marcin@nicram.net [3]> napisał:
W dniu 25 czerwca 2012 14:59 użytkownik Sławomir Paszkiewicz
<paszczus@gmail.com [1]> napisał:
Ale u Ciebie to dotyka tylko zmiany predkosci. Mi zalezy na
calosci. Zewnetrzne IP ma niestety tylko czesc klientow :(
no to zrób tak jak Tomek powiedział. nie przeładowywuj iptables a jedynie ipset. ja mam taki fragmencik kodu: function blokadareload(){ echo -en "tPrzeladowywuje blokade ...t"
blokadaf="blokada.ip" ipsetname="blokowani" ipsetnametmp="blokowani_tmp" if [ -a "${dir}/${blokadaf}" ]; then $ips -! -N $ipsetname hash:net $ips -N $ipsetnametmp hash:net grep "^" "${dir}/${blokadaf}" | grep
-v "#"| grep [0123456789] | while read IP nazwa do ** $ips -A $ipsetnametmp $IP done $ips -W $ipsetnametmp $ipsetname $ips -X $ipsetnametmp fi echo "OK" }
$ipt -t nat -A PREROUTING -p tcp -m set --match-set $ipsetname src -m multiport --dport 80,8080 -j DNAT --to 1.1.1.1:80 [2]
Troche skomplikowane, ale moze cos z tego wyciagne ;)
U mnie jest tak, ze kazda podsiec z LMS ma osobnego ispet-a, np.:
$IPSET create zarejestrowani_10.10.1.0 bitmap:ip,mac range 10.10.1.0/24 [4]
$IPSET create zarejestrowani_10.10.2.0 bitmap:ip,mac range 10.10.2.0/24 [5]
do nich dopisuje komputery, np
$IPSET add $ZAREJESTROWANI $1,$2 gdzie $ZAREJESTROWANI to nazwa set-a, $1 to IP i $2 to MAC komputera
a nastepnie w iptables mam:
$IPT -A FORWARD -i eth1.101 -m set --match-set zarejestrowani_10.10.1.0 src,src -j ACCEPT $IPT -A FORWARD -i eth1.102 -m set --match-set zarejestrowani_10.10.2.0 src,src -j ACCEPT
wlasciwie to musze jakos tak przerobic te skrypty, zeby przy przeladowaniu ruszaly tylko ipset-y (destroy,create lub del/add komp ) a nie cale iptables na to wychodzi.
Nic nie musisz przerabiać! Twórz ipsety z nowymi zestawiamy zasobów IP jako tymczasowe, a potem ipset swap aktualny tymczasowy i ipset destroy tymczasowy.
No rozumiem tego swap-a i zaraz sie za to zabiore, ale tak czy siak w
aktualnej konfiguracji podczas przeladowania *zawsze* robie te flushe ktore wczesniej pisalem wiec niezaleznie od tego czy podmienie ipset-a czy nie, to flush sie wykona i i tak rozlaczy
W dniu 25 czerwca 2012 15:18 użytkownik Sławomir Paszkiewicz < paszczus@gmail.com> napisał:
No rozumiem tego swap-a i zaraz sie za to zabiore, ale tak czy siak w aktualnej konfiguracji podczas przeladowania *zawsze* robie te flushe ktore wczesniej pisalem wiec niezaleznie od tego czy podmienie ipset-a czy nie, to flush sie wykona i i tak rozlaczy
no to trochę musisz przerobić, ale zobaczysz jak odsapnie ci serwerek ;)
W dniu 25 czerwca 2012 15:11 użytkownik Sławomir Paszkiewicz < paszczus@gmail.com> napisał:
W dniu 25 czerwca 2012 15:06 użytkownik Marcin marcin@nicram.netnapisał:
W dniu 25 czerwca 2012 14:59 użytkownik Sławomir Paszkiewicz <
paszczus@gmail.com> napisał:
Ale u Ciebie to dotyka tylko zmiany predkosci. Mi zalezy na calosci.
Zewnetrzne IP ma niestety tylko czesc klientow :(
no to zrób tak jak Tomek powiedział. nie przeładowywuj iptables a jedynie ipset. ja mam taki fragmencik kodu: function blokadareload(){ echo -en "\tPrzeladowywuje blokade ...\t" blokadaf="blokada.ip" ipsetname="blokowani" ipsetnametmp="blokowani_tmp" if [ -a "${dir}/${blokadaf}" ]; then $ips -! -N $ipsetname hash:net $ips -N $ipsetnametmp hash:net grep "^" "${dir}/${blokadaf}" | grep -v "#"| grep [0123456789] | while read IP nazwa do $ips -A $ipsetnametmp $IP done $ips -W $ipsetnametmp $ipsetname $ips -X $ipsetnametmp fi echo "OK" }
$ipt -t nat -A PREROUTING -p tcp -m set --match-set $ipsetname src -m multiport --dport 80,8080 -j DNAT --to 1.1.1.1:80
Troche skomplikowane, ale moze cos z tego wyciagne ;)
U mnie jest tak, ze kazda podsiec z LMS ma osobnego ispet-a, np.:
$IPSET create zarejestrowani_10.10.1.0 bitmap:ip,mac range 10.10.1.0/24 $IPSET create zarejestrowani_10.10.2.0 bitmap:ip,mac range 10.10.2.0/24
do nich dopisuje komputery, np
$IPSET add $ZAREJESTROWANI $1,$2 gdzie $ZAREJESTROWANI to nazwa set-a, $1 to IP i $2 to MAC komputera
a nastepnie w iptables mam:
$IPT -A FORWARD -i eth1.101 -m set --match-set zarejestrowani_10.10.1.0 src,src -j ACCEPT $IPT -A FORWARD -i eth1.102 -m set --match-set zarejestrowani_10.10.2.0 src,src -j ACCEPT
wlasciwie to musze jakos tak przerobic te skrypty, zeby przy przeladowaniu ruszaly tylko ipset-y (destroy,create lub del/add komp ) a nie cale iptables na to wychodzi.
tak, dotykasz tylko ipset, a iptables nie dotykasz :) zobaczysz jak ci serwer odpocznie :)
lms mailing list lms@lists.lms.org.pl http://lists.lms.org.pl/mailman/listinfo/lms
W dniu 25.06.2012 15:14, Marcin napisał(a):
W dniu 25 czerwca 2012 15:11 użytkownik Sławomir Paszkiewicz <paszczus@gmail.com [8]> napisał:
W dniu 25 czerwca 2012 15:06 użytkownik Marcin <marcin@nicram.net [3]> napisał:
W dniu 25 czerwca 2012 14:59 użytkownik Sławomir Paszkiewicz <paszczus@gmail.com [1]> napisał:
Ale u Ciebie to dotyka tylko zmiany predkosci. Mi zalezy na calosci. Zewnetrzne IP ma niestety tylko czesc klientow :(
no to zrób tak jak Tomek powiedział. nie przeładowywuj iptables a jedynie ipset. ja mam taki fragmencik kodu: function blokadareload(){ echo -en "tPrzeladowywuje blokade ...t" blokadaf="blokada.ip" ipsetname="blokowani" ipsetnametmp="blokowani_tmp" if [ -a "${dir}/${blokadaf}" ]; then $ips -! -N $ipsetname hash:net $ips -N $ipsetnametmp hash:net grep "^" "${dir}/${blokadaf}" | grep -v "#"| grep [0123456789] | while read IP nazwa do $ips -A $ipsetnametmp $IP done $ips -W $ipsetnametmp $ipsetname $ips -X $ipsetnametmp fi echo "OK" }
$ipt -t nat -A PREROUTING -p tcp -m set --match-set $ipsetname src -m multiport --dport 80,8080 -j DNAT --to 1.1.1.1:80 [2]
Troche skomplikowane, ale moze cos z tego wyciagne ;)
U mnie jest tak, ze kazda podsiec z LMS ma osobnego ispet-a, np.:
$IPSET create zarejestrowani_10.10.1.0 bitmap:ip,mac range 10.10.1.0/24 [4] $IPSET create zarejestrowani_10.10.2.0 bitmap:ip,mac range 10.10.2.0/24 [5]
do nich dopisuje komputery, np
$IPSET add $ZAREJESTROWANI $1,$2 gdzie $ZAREJESTROWANI to nazwa set-a, $1 to IP i $2 to MAC komputera
a nastepnie w iptables mam:
$IPT -A FORWARD -i eth1.101 -m set --match-set zarejestrowani_10.10.1.0 src,src -j ACCEPT $IPT -A FORWARD -i eth1.102 -m set --match-set zarejestrowani_10.10.2.0 src,src -j ACCEPT
wlasciwie to musze jakos tak przerobic te skrypty, zeby przy przeladowaniu ruszaly tylko ipset-y (destroy,create lub del/add komp ) a nie cale iptables na to wychodzi.
tak, dotykasz tylko ipset, a iptables nie dotykasz :) zobaczysz jak ci serwer odpocznie :)
W ipset brakuje już tylko zestawu, który by trzymać pary adresów IP na odwzorowania, które w NAT można użyć! Ale do tego wiele nie trzeba i można w ipset taki typ zestawu szybko przygotować. Potem tylko doróbka w DNETMAP v2 i mamy jednoregułkowe natowanie wewnętrznych IP na zewnętrzne IP ;-)
Wiadomość napisana przez Tomasz Chiliński w dniu 2012-06-25, o godz. 15:24:
W ipset brakuje już tylko zestawu, który by trzymać pary adresów IP na odwzorowania, które w NAT można użyć! Ale do tego wiele nie trzeba i można w ipset taki typ zestawu szybko przygotować. Potem tylko doróbka w DNETMAP v2 i mamy jednoregułkowe natowanie wewnętrznych IP na zewnętrzne IP ;-)
potwierdzam, odkąd zrobiłem u nas dnetmap i ipset przeladowanie nie powoduje przerw u klientow, mam pare tablic ipset, wszystkie przeladowujemy swapem, skryptami o podobnej budowie do tego:
echo "Starting ipset mac table generator" echo -ne " - creating temporary table and generating data: " for i in `cat ${0%$START_FILE}rc.fire_mac | grep ^[^#] | cut -d'#' -f1` do if [ ! `echo $i | grep eth` == "" ] || [ ! `echo $i | grep wlan` == "" ] || [ ! `echo $i | grep wifi` == "" ] || [ ! `echo $i | grep vlan` == "" ]; then INTERFACE=`echo $i | cut -d'-' -f1` NET=`echo $i | cut -d'-' -f2` if [ `/usr/local/sbin/ipset -L -n |grep -c ^mactable-$INTERFACE-new$` == '1' ]; then /usr/local/sbin/ipset -X mactable-$INTERFACE-new /usr/local/sbin/ipset -N mactable-$INTERFACE-new macipmap --network $NET else /usr/local/sbin/ipset -N mactable-$INTERFACE-new macipmap --network $NET fi echo -ne "$INTERFACE" else IP=`echo $i | cut -d'-' -f1` MAC=`echo $i | cut -d'-' -f2`
/usr/local/sbin/ipset -A mactable-$INTERFACE-new $IP,$MAC -exist echo -ne "#" fi done echo " done" echo -ne " - switching table: " for i in `cat ${0%$START_FILE}rc.fire_mac | grep ^[^#] | cut -d'#' -f1` do if [ ! `echo $i | grep eth` == "" ] || [ ! `echo $i | grep wlan` == "" ] || [ ! `echo $i | grep wifi` == "" ] || [ ! `echo $i | grep vlan` == "" ]; then INTERFACE=`echo $i | cut -d'-' -f1` NET=`echo $i | cut -d'-' -f2` if [ `/usr/local/sbin/ipset -L -n |grep -c ^mactable-$INTERFACE$` == "0" ]; then /usr/local/sbin/ipset -N mactable-$INTERFACE macipmap --network $NET fi /usr/local/sbin/ipset -W mactable-$INTERFACE mactable-$INTERFACE-new /usr/local/sbin/ipset -X mactable-$INTERFACE-new echo -ne "#" fi done echo " done"
2012/6/25 "D.Wesołowski" wesoly@klu.pl
Wiadomość napisana przez Tomasz Chiliński w dniu 2012-06-25, o godz. 15:24:
W ipset brakuje już tylko zestawu, który by trzymać pary adresów IP na odwzorowania, które w NAT można użyć! Ale do tego wiele nie trzeba i można w ipset taki typ zestawu szybko przygotować. Potem tylko doróbka w DNETMAP v2 i mamy jednoregułkowe natowanie wewnętrznych IP na zewnętrzne IP ;-)
potwierdzam, odkąd zrobiłem u nas dnetmap i ipset przeladowanie nie powoduje przerw u klientow, mam pare tablic ipset, wszystkie przeladowujemy swapem, skryptami o podobnej budowie do tego:
echo "Starting ipset mac table generator" echo -ne " - creating temporary table and generating data: " for i in `cat ${0%$START_FILE}rc.fire_mac | grep ^[^#] | cut -d'#' -f1` do if [ ! `echo $i | grep eth` == "" ] || [ ! `echo $i | grep wlan` == "" ] || [ ! `echo $i | grep wifi` == "" ] || [ ! `echo $i | grep vlan` == "" ]; then INTERFACE=`echo $i | cut -d'-' -f1` NET=`echo $i | cut -d'-' -f2` if [ `/usr/local/sbin/ipset -L -n |grep -c ^mactable-$INTERFACE-new$` == '1' ]; then /usr/local/sbin/ipset -X mactable-$INTERFACE-new /usr/local/sbin/ipset -N mactable-$INTERFACE-new macipmap --network $NET else /usr/local/sbin/ipset -N mactable-$INTERFACE-new macipmap --network $NET fi echo -ne "$INTERFACE" else IP=`echo $i | cut -d'-' -f1` MAC=`echo $i | cut -d'-' -f2`
/usr/local/sbin/ipset -A mactable-$INTERFACE-new $IP,$MAC
-exist echo -ne "#" fi done echo " done" echo -ne " - switching table: " for i in `cat ${0%$START_FILE}rc.fire_mac | grep ^[^#] | cut -d'#' -f1` do if [ ! `echo $i | grep eth` == "" ] || [ ! `echo $i | grep wlan` == "" ] || [ ! `echo $i | grep wifi` == "" ] || [ ! `echo $i | grep vlan` == "" ]; then INTERFACE=`echo $i | cut -d'-' -f1` NET=`echo $i | cut -d'-' -f2` if [ `/usr/local/sbin/ipset -L -n |grep -c ^mactable-$INTERFACE$` == "0" ]; then /usr/local/sbin/ipset -N mactable-$INTERFACE macipmap --network $NET fi /usr/local/sbin/ipset -W mactable-$INTERFACE mactable-$INTERFACE-new /usr/local/sbin/ipset -X mactable-$INTERFACE-new echo -ne "#" fi done echo " done"
Dzieki Panowie, Wywalilem niepotrzebne iptables -F, dodalem kilka ifow i zastosowalem ipset swap i faktycznie, ani jeden ping sie nie traci ;-)
Co do DNETMAP to jeszcze nie do konca ogarniam jak to zastosowac w mojej sytuacji, tzn w sytuacji w ktorej przyznaje tylko okreslonym klientom publiczne adresy IP (teraz robi to iptables SNAT DNAT) a nie round-robin dla kazdego usera.
Wiadomość napisana przez Sławomir Paszkiewicz w dniu 2012-06-26, o godz. 19:52:
Co do DNETMAP to jeszcze nie do konca ogarniam jak to zastosowac w mojej sytuacji, tzn w sytuacji w ktorej przyznaje tylko okreslonym klientom publiczne adresy IP (teraz robi to iptables SNAT DNAT) a nie round-robin dla kazdego usera.
robisz dwie tablice ipset, np forward-nat oraz forward-dnetmap i wrzucasz odpowiednio adresy IP do tablic,
dla NATowania robisz regułkę:
iptables -t nat -A POSTROUTING -m set --match-set forward-nat src -o $INTERNET_ETH -d 0/0 -j SNAT --to $INTERNET_IP
dla publicznych IP robisz:
iptables -t nat -A POSTROUTING -m set --match-set forward-dnetmap src -d 0/0 -j DNETMAP --prefix prefix_publicznych/maska --ttl 400 iptables -t nat -A PREROUTING -j DNETMAP --ttl 400
jak ma wychodzić klient do Internetu wybierasz tablicami ipset, przeladowanie to swapowanie tablicami
W dniu 26 czerwca 2012 21:07 użytkownik "D.Wesołowski" wesoly@klu.plnapisał:
Wiadomość napisana przez Sławomir Paszkiewicz w dniu 2012-06-26, o godz. 19:52:
Co do DNETMAP to jeszcze nie do konca ogarniam jak to zastosowac w mojej sytuacji, tzn w sytuacji w ktorej przyznaje tylko okreslonym klientom publiczne adresy IP (teraz robi to iptables SNAT DNAT) a nie round-robin dla kazdego usera.
robisz dwie tablice ipset, np forward-nat oraz forward-dnetmap i wrzucasz odpowiednio adresy IP do tablic,
Teraz dla forward-nat mam po dla kazdej klasy z osobna:
$IPSET create zarejestrowani_10.10.1.0 bitmap:ip,mac range 10.10.1.0/24 $IPSET create zarejestrowani_10.10.2.0 bitmap:ip,mac range 10.10.2.0/24 $IPSET create zarejestrowani_10.10.3.0 bitmap:ip,mac range 10.10.3.0/24
+
$IPT -A FORWARD -i eth1.101 -m set --match-set zarejestrowani_10.10.1.0 src,src -j ACCEPT $IPT -A FORWARD -i eth1.102 -m set --match-set zarejestrowani_10.10.2.0 src,src -j ACCEPT $IPT -A FORWARD -i eth1.103 -m set --match-set zarejestrowani_10.10.3.0 src,src -j ACCEPT
dla NATowania robisz regułkę:
iptables -t nat -A POSTROUTING -m set --match-set forward-nat src -o $INTERNET_ETH -d 0/0 -j SNAT --to $INTERNET_IP
I tutaj analogicznie:
$IPT -t nat -A POSTROUTING -s 10.10.1.0/24 -o eth0 -j SNAT --to-source $WAN_IP $IPT -t nat -A POSTROUTING -s 10.10.2.0/24 -o eth0 -j SNAT --to-source $WAN_IP $IPT -t nat -A POSTROUTING -s 10.10.3.0/24 -o eth0 -j SNAT --to-source $WAN_IP
hmm... wlasnie uswiadomiles mi, ze zamiast -s 10.10.x.x moge uzywac set-ow, w sumie wyjdzie na to samo.
dla publicznych IP robisz:
iptables -t nat -A POSTROUTING -m set --match-set forward-dnetmap src -d 0/0 -j DNETMAP --prefix prefix_publicznych/maska --ttl 400 iptables -t nat -A PREROUTING -j DNETMAP --ttl 400
Tylko nadal nie rozumiem, to co podales nie jest czasem tak, ze on z prefix_publicznych/maska bedzie bral wolny IP i przydzielal klientom? A mi chodzi o to, aby zawsze klient o IP 10.10.1.5 dostawal 1.2.3.4 zewnetrzny IP co na chwile obecna robie:
$IPT -t nat -A PREROUTING -d 1.2.3.4 -j DNAT --to-destination 10.10.1.5 $IPT -t nat -A POSTROUTING -s 10.10.1.5 -j SNAT --to-source 1.2.3.4
Czy to w ogole jest sens sie tym bawic w moim przypadku?
jak ma wychodzić klient do Internetu wybierasz tablicami ipset,
przeladowanie to swapowanie tablicami
Dzieki w ogole za odpowiedz ;-)
-- D.Wesołowski wesoly@klu.pl
§ Wiadomość napisana przez Sławomir Paszkiewicz w dniu 2012-06-26, o godz. 21:18:
dla publicznych IP robisz:
iptables -t nat -A POSTROUTING -m set --match-set forward-dnetmap src -d 0/0 -j DNETMAP --prefix prefix_publicznych/maska --ttl 400 iptables -t nat -A PREROUTING -j DNETMAP --ttl 400
Tylko nadal nie rozumiem, to co podales nie jest czasem tak, ze on z prefix_publicznych/maska bedzie bral wolny IP i przydzielal klientom? A mi chodzi o to, aby zawsze klient o IP 10.10.1.5 dostawal 1.2.3.4 zewnetrzny IP co na chwile obecna robie:
$IPT -t nat -A PREROUTING -d 1.2.3.4 -j DNAT --to-destination 10.10.1.5 $IPT -t nat -A POSTROUTING -s 10.10.1.5 -j SNAT --to-source 1.2.3.4
Czy to w ogole jest sens sie tym bawic w moim przypadku?
jak ma wychodzić klient do Internetu wybierasz tablicami ipset, przeladowanie to swapowanie tablicami
Dzieki w ogole za odpowiedz ;-)
jak ustawisz bardzo duzy ttl to zawsze dostanie ten sam, chyba ze reset serwera ;)
W dniu 26.06.2012 22:16, D.Wesołowski napisał(a):
§
Wiadomość napisana przez Sławomir Paszkiewicz w dniu 2012-06-26, o godz. 21:18:
dla publicznych IP robisz:
iptables -t nat -A POSTROUTING -m set --match-set forward-dnetmap src -d 0/0 -j DNETMAP --prefix prefix_publicznych/maska --ttl 400 iptables -t nat -A PREROUTING -j DNETMAP --ttl 400
Tylko nadal nie rozumiem, to co podales nie jest czasem tak, ze on z prefix_publicznych/maska bedzie bral wolny IP i przydzielal klientom? A mi chodzi o to, aby zawsze klient o IP 10.10.1.5 dostawal 1.2.3.4 zewnetrzny IP co na chwile obecna robie:
$IPT -t nat -A PREROUTING -d 1.2.3.4 -j DNAT --to-destination 10.10.1.5 $IPT -t nat -A POSTROUTING -s 10.10.1.5 -j SNAT --to-source 1.2.3.4
Czy to w ogole jest sens sie tym bawic w moim przypadku?
jak ma wychodzić klient do Internetu wybierasz tablicami ipset, przeladowanie to swapowanie tablicami
Dzieki w ogole za odpowiedz ;-)
jak ustawisz bardzo duzy ttl to zawsze dostanie ten sam, chyba ze reset serwera ;)
W DNETMAP v2 możliwe jest uzyskanie stałych powiązań IP wewnętrznych z zewnętrznymi.
W DNETMAP v2 możliwe jest uzyskanie stałych powiązań IP wewnętrznych z zewnętrznymi.
właśnie dostałem info:
"Witam wszystkich.
Z przyjemnością informuję, iż jest dostępna nowa wersja modułu DNETMAP, która zawiera następujące zmiany: - nowy rodzaj statycznego powiązania - nowa opcja 'persistent' dla prefixu - dodanie dodatkowej informacji w /proc/net/xt_DNETMAP/prefix_stat dotyczącej liczby statycznych powiązań i flagi 'persistent' - dodanie wsparcia zapisu przez interfejs proc (dodanie/usunięcie/wymiecenie powiązania) - aktualizacja manuala - logowanie zdarzeń wyczerpania/zwolnienia prefixu, a nie tak jak teraz każdego trafienia w regułę z wyczerpanym prefixem - to zapewnia brak zalewu logów w przypadku wyczerpania prefixu DNETMAPa i użycia w zapasie NATu 1:n - dozwolenie większych wartości dla opcji reguły 'ttl' - pozwala na podanie ttl wielkości jednego dnia
Zainteresowanym polecam zapoznanie się ze zaktualizowaną stroną http://cat.piasta.pl/dnetmap
DNETMAP v2 jest już zaakceptowany w gałęzi rozwojowej projektu xtables-addons, więc oficjalnie będzie dostępny w wersji 1.43. Jeżeli komuś będzie zależało na funkcjonalności, mogę zapewnić starsze źródła xtables-addons z łatką dnetmap-v2. Łatka dla wersji 1.34 jest już dostępna na stronie."
[Monday, 25 June 2012], Sławomir Paszkiewicz napisał(a):
Zastanawiam sie czy ktos z Was ma madrzejszy sposob na przeladowania iptables.
Ja mam swoj skrypt który:
- laduje to co jest aktualnie w iptables (tc -s class show dev xxx i
grepowanie perlem)
- porównuje to z tym co powinno byc (wczytuje z LMS jakie wartosci
maja byc dla poszcegolnych klientow)
- "tc class change dev xxx ..... " jesli musi byc zmiana predkosci
Chodzi szybko, brak przerw (u mnie wszyscy klienci maja zewnetrzne IP) :)
Ale u Ciebie to dotyka tylko zmiany predkosci. Mi zalezy na calosci. Zewnetrzne IP ma niestety tylko czesc klientow :(
Nie do końca - obsługuje to wszystko - od zmiany predkosc az do dodawania/kasowania hostow (zmiane IP klienta rowniez).
Inna sprawa, ze powoli przymierzam sie do przeniesienia tego na nadajniki (jak tylko ostatni z nich przeniesiony zostanie ma MT)
Przed wdrożeniem ipsetow Twoj problem rozwiazalem w bardzo prosty sposób. Dopisalem do skryptu regułki przepuszczające wszystko, zaraz pod -F i na końcu skryptu nastepny wpis, usuwający tą regułę. Minusem tego było, że osoby odłączone dostawały net na te pare sekund w trakcie przeladowania, ale za to reszta nie odczuwala przeskoku. Sposób może i nie górnolotny ale sprawdzał się ;-)
Pozdrawiam Tomasz Majewski
Hej,
Zastanawiam sie czy ktos z Was ma madrzejszy sposob na przeladowania iptables.
Aktualnie mam tak, ze w momencie przeladowania wykonywane jest iptables -F -t nat, FORWARD itd a nastepnie tworzone na nowo i dodawane poszczegolne komputery. Dziala to tak od lat, ale niestety ma swoj mankament. Podczas przeladowania klienci "traca" internet na kilka-kilkanascie sekund (w zaleznosci od ilosci wpisow w iptables). O ile przeladowania odbywaja sie raz dziennie to nie ma to wiekszego problemu, ale jak sa czesciej (tak jak u mnie) to zaczyna to byc dla klientow uciazliwe.
Zoptymalizowalem regulki juz dosyc mocno, korzystam z ipset i ten czas znaczaco sie zmniejszyl, ale nadal wystepuje. Macie na to jakies rozwiazanie? ;)
Pozdrawiam
lms mailing list lms@lists.lms.org.pl http://lists.lms.org.pl/mailman/listinfo/lms
uczestnicy (8)
-
"D.Wesołowski"
-
Jaroslaw Dziubek
-
Kamil Kordas
-
Marcin
-
Skiba Marek
-
Sławomir Paszkiewicz
-
Tomasz Chiliński
-
Tomasz Majewski