Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

Członek DUG


Stoi sobie serwer a na nim bind i transparent proxy. (wszystko działa)
Chcę zmienić kolejkowanie ze skryptu BiExi na IMQ. (skrypt BiExi nie trzyma uploadu)
Nastrugałem sobie takie coś na podstawie Jej skryptu:
#!/usr/bin/perl
#eth0 - wyjście do LAN
#eth1 - wyjscie na swiat
# zmienne
$max_upload = 500;
$max_download = 6100;
$cid = 5;
$handl = 320;
open (PLIK_SHIT, "/etc/upierdalacz/upierdalacz.list")or die "open $alert_file: $!\n";
{
sleep 1;
if (seek(PLIK_SHIT,0,1))
{
print "--------------------------------------------- \n";
print " UPLOAD \n";
print "--------------------------------------------- \n";
system "ip link set imq0 up";
print "------- kasowanie imq0 -------\n";
system "qdisc del dev imq0 root";
print "OK\n";
system "tc qdisc add dev imq0 root handle 1: htb default 10";
system "tc class add dev imq0 parent 1: classid 1:1 htb rate $max_uploadkbit ceil $max_uploadkbit quantum 8533";
print "--------------------------------------------- \n";
print " DOWNLOAD \n";
print "--------------------------------------------- \n";
system "ip link set imq1 up";
print "------- kasowanie imq0 -------\n";
system "qdisc del dev imq1 root";
print "OK\n";
system "tc qdisc add dev imq1 root handle 1: htb default 10";
# zaklada glowna klase z maksymalna mozliwa przepustowoscia na glownej kolejce.
system "tc class add dev imq1 parent 1: classid 1:1 htb rate $max_downloadkbit ceil $max_downloadkbit quantum 8533";
while (<PLIK_SHIT>)
{
chop;
next if (/^\s*$/); # wyjazd z pustymi liniami
next if (/^#/); # wyjazd z #
if (/(\d+\.\d+\.\d+\.\d+) \; (\d+) \; (\d+) \; (\d+) \; (\d+) \; (\S+)/)
{
print "| Kolejka na imq0 RUCH PRZYCHODZACY dla IP:$1 rate: $2kbit cail: $3kbit\n";
system "tc class add dev imq0 parent 1:1 classid 1:$cid htb rate $2kbit ceil $3kbit quantum 3 burst 10k";
system "tc filter add dev imq0 parent 1: protocol ip prio 2 u32 match ip src $1 flowid 1:$cid";
system "tc qdisc add dev imq0 parent 1:$cid handle $handl:0 sfq perturb 10";
#
print "| Kolejka na imq1 RUCH WYCHODZACY dla IP:$1 rate: $4kbit cail: $5kbit\n";
system "tc class add dev imq1 parent 1:1 classid 1:$cid htb rate $4kbit ceil $5kbit quantum 3 burst 10k";
system "tc filter add dev imq1 parent 1: protocol ip prio 2 u32 match ip dst $1 flowid 1:$cid";
system "tc qdisc add dev imq1 parent 1:$cid handle $handl:0 sfq perturb 10";
print "koniec petli \n";
$cid = $cid + 1;
$handl = $handl + 1;
}
} # end while
} # end if seek
} # end for
close PLIK_SHIT;
print "tworzenie wejscia na imq0\n";
system "iptables -t mangle -A POSTROUTING -o eth0 -j IMQ --todev 0";
print "tworzenie wyjscia na imq1\n";
system "iptables -t mangle -A PREROUTING -i eth0 -j IMQ --todev 1";
print "----utworzenie kolejek zakonczone----- \n";Niby kolejkuje, ale internet przestaje działać na klientach wewnątrz sieci. Może ktoś pomoże?
Ostatnio edytowany przez Marek_boss (2009-07-27 16:03:36)
Offline


Stary wyjadacz :P



zacznij markować ruch z squida przez znakowanie pakietów TOS
Offline




matka przelozona
Masz wersje trzymajaca upload + nat by nie trzeba bylo rodzielac na 2 pliki tylko wszystko w jednym
#!/usr/bin/perl
#
# NAT + QOS old VER by BiExi
#
# $debugowanie = 0;
# eth0 - lan
$userow = 0;
$zewn = 0;
$zablokowanych = 0;
$cid = 5;
$handl = 320;
$zrodlo = 600;
# -----------[ poczatkowe reguly ]-----------
system "echo 1 > /proc/sys/net/ipv4/ip_forward";
system "/bin/echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts";
system "/bin/echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route";
system "/bin/echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects";
system "/bin/echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses";
system "echo 1 > /proc/sys/net/ipv4/tcp_timestamps ";
system "echo 24192 > /proc/sys/net/ipv4/netfilter/ip_conntrack_max";
system "echo 16024 > /proc/sys/net/ipv4/tcp_max_syn_backlog ";
system "echo 1 > /proc/sys/net/ipv4/tcp_rfc1337 ";
system "echo 1 > /proc/sys/net/ipv4/ip_no_pmtu_disc ";
system "echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses";
system "echo 60 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_close_wait";
system "echo 360 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established";
system "echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout";
system "echo 2400 > /proc/sys/net/ipv4/tcp_keepalive_time";
system "echo 0 > /proc/sys/net/ipv4/tcp_window_scaling";
system "echo 0 > /proc/sys/net/ipv4/tcp_sack";
system "echo 20 > /proc/sys/net/ipv4/ipfrag_time";
system "echo 1280 > /proc/sys/net/ipv4/tcp_max_syn_backlog";
system "/bin/echo 1024 > /proc/sys/net/ipv4/neigh/default/gc_thresh1";
system "/bin/echo 4096 > /proc/sys/net/ipv4/neigh/default/gc_thresh2";
system "/bin/echo 8192 > /proc/sys/net/ipv4/neigh/default/gc_thresh3";
system "iptables -F";
system "iptables -X";
system "iptables -Z";
system "iptables -t nat -X";
system "iptables -t nat -F";
system "iptables -t mangle -F";
system "iptables -t mangle -X";
system "iptables -P INPUT ACCEPT";
system "iptables -P FORWARD DROP";
system "iptables -P OUTPUT ACCEPT";
system "iptables -A INPUT -i lo -j ACCEPT";
system "iptables -A FORWARD -o lo -j ACCEPT";
system "iptables -A OUTPUT -o lo -j ACCEPT";
system "tc qdisc del root dev imq1 2> /dev/null";
system "tc qdisc del root dev imq0 2> /dev/null";
system "ip link set imq0 down";
system "ip link set imq1 down";
system "ip link set imq0 up";
system "ip link set imq1 up";
system "iptables -t mangle -A PREROUTING -i eth0 -j IMQ --todev 0 "; # Download
system "iptables -t mangle -A POSTROUTING -o eth0 -j IMQ --todev 1"; # Upload
system "iptables -t mangle -A PREROUTING -i eth0 -j IMQ --todev 0"; # Download
system "iptables -t mangle -A POSTROUTING -o eth0 -j IMQ --todev 1"; # Upload
system "iptables -A INPUT -m conntrack --ctstate NEW -p tcp --tcp-flags SYN,RST,ACK,FIN,URG,PSH ACK -j DROP";
system "iptables -A INPUT -m conntrack --ctstate NEW -p tcp --tcp-flags SYN,RST,ACK,FIN,URG,PSH FIN -j DROP";
system "iptables -A INPUT -m conntrack --ctstate NEW -p tcp --tcp-flags SYN,RST,ACK,FIN,URG,PSH FIN,URG,PSH -j DROP";
system "iptables -A INPUT -m conntrack --ctstate INVALID -p tcp --tcp-flags ! SYN,RST,ACK,FIN,PSH,URG SYN,RST,ACK,FIN,PSH,URG -j DROP";
system "iptables -A INPUT -p tcp -j ACCEPT -m state --state ESTABLISHED,RELATED";
system "iptables -A FORWARD -p tcp -j ACCEPT -m state --state ESTABLISHED,RELATED";
system "iptables -A OUTPUT -p tcp -j ACCEPT -m state --state ESTABLISHED,RELATED";
system "iptables -A INPUT -p udp -j ACCEPT -m state --state ESTABLISHED,RELATED";
system "iptables -A FORWARD -p udp -j ACCEPT -m state --state ESTABLISHED,RELATED";
system "iptables -A OUTPUT -p udp -j ACCEPT -m state --state ESTABLISHED,RELATED";
system "iptables -A INPUT -p icmp -j ACCEPT -m state --state ESTABLISHED,RELATED";
system "iptables -A FORWARD -p icmp -j ACCEPT -m state --state ESTABLISHED,RELATED";
system "iptables -A OUTPUT -p icmp -j ACCEPT -m state --state ESTABLISHED,RELATED";
system "iptables -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED";
system "iptables -A FORWARD -j ACCEPT -m state --state ESTABLISHED,RELATED";
system "iptables -A OUTPUT -j ACCEPT -m state --state ESTABLISHED,RELATED";
# - -- ---[ ruch przychodzacy ]--- -- -
system "tc qdisc del dev imq1 root handle 1:0 htb 2> /dev/null > /dev/null";
system "tc qdisc add dev imq1 root handle 1:0 htb";
system "tc class add dev imq1 parent 1:0 classid 1:1 htb rate 100mbit ceil 100mbit quantum 1024";
system "tc class add dev imq1 parent 1:1 classid 1:2 htb rate 17mbit ceil 22mbit quantum 1024";
system "tc class add dev imq1 parent 1:1 classid 1:3 htb rate 17mbit ceil 22mbit quantum 1024";
# - -- ---[ ruch wychodzacy ]--- -- -
system "tc qdisc del dev imq0 root handle 1:0 htb 2> /dev/null > /dev/null";
system "tc qdisc add dev imq0 root handle 1:0 htb default 10";
system "tc class add dev imq0 parent 1:0 classid 1:1 htb rate 15mbit ceil 15mbit quantum 1024";
system "tc class add dev imq0 parent 1:1 classid 1:2 htb rate 10mbit ceil 10mbit quantum 1024";
system "tc class add dev imq0 parent 1:1 classid 1:4 htb rate 200kbit ceil 200kbit quantum 1024";
# wjazd dla NAT'u dla wapow z za devila
# -----------[ route_ip.list ]-------------
system "echo > /etc/ethers";
# -----------[ userlista ]-------------
open (PLIK_MISKI, "/root/netsys/users.list") or die "open $alert_file: $!\n";
# tak jak tail -f :)...
# for (;;)
{
sleep 1;
if (seek(PLIK_MISKI,0,1))
{
while (<PLIK_MISKI>)
{
chop;
next if (/^\s*$/); # wyjazd z pustymi liniami
next if (/^#/); # wyjazd z #
if (defined($debugowanie))
# gdy tryb debugowania wyswietlaj wszystko
{print "$_\n";}
if (/\[\*\*\]\s+(.*)\s+\[\*\*\]/)
{
$type=$1;
}
if (/(\S+\:\S+\:\S+\:\S+:\S+:\S+) \; (\d+\.\d+\.\d+\.\d+) \; (\d+\.\d+\.\d+\.\d+) \; (\S+) \; (\S+) \; (\S+) \; (\d+) \; (\d+) \; (\d+) \; (\S+)/)
{ # przyklad xx:xx:xx:xx:xx:xx ; 10.10.10.11 ; 10.10.10.1 ; ok ; imq0 ; pvc0 ; 40 ; 130 ; 60 ; jan kowalski
&mack_sel ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10);
}
} # end while
} # end if seek
} # end for
close PLIK_MISi;
print "|------------------ --- --- - - - - - - \n";
print "| INFORMACJE PO PRZELADOWANIU \n";
if ($ARGV[0] eq "noc")
{
print "| Tryb pracy: NOCNY \n";
}
else
{
print "| Tryb pracy: DZIENNY \n";
}
print "| Userow ktorym przydzielono net: $userow \n";
print "| Userow z zewn IP: $zewn \n";
print "| userow zablokowanych: $zablokowanych \n";
print "|------------------ --- --- - - - - - - \n";
sub mack_sel
{
my ($mac, $ip, $brama, $st, $iface, $ifo, $mind, $maxd, $maxu, $nazwisko) = @_;
if ($st eq "ok")
{
if ($ARGV[0] eq "noc")
{
$maxd = $maxd + 400;
}
# download
system "tc class add dev imq1 parent 1:2 classid 1:$cid htb rate $mind\kbit ceil $maxd\kbit burst 1024Kb";
system "tc filter add dev imq1 protocol ip preference 2 parent 1:0 u32 match ip dst $ip flowid 1:$cid";
system "tc qdisc add dev imq1 parent 1:$cid handle $handl:0 esfq ";
# upload
system "tc class add dev imq0 parent 1:2 classid 1:$zrodlo htb rate 10kbit ceil $maxu\kbit";
system "tc filter add dev imq0 parent 1:0 protocol ip prio 1 u32 match ip src $ip flowid 1:$zrodlo";
system "tc qdisc add dev imq0 parent 1:$zrodlo handle $zrodlo:0 esfq ";
system "/sbin/iptables -t nat -A POSTROUTING -s $ip -j MASQUERADE";
system "iptables -I FORWARD -s $ip -p tcp --syn -m connlimit --connlimit-above 110 --connlimit-mask 32 -j REJECT";
system "/sbin/iptables -A FORWARD -s $ip -j ACCEPT";
$cid = $cid + 1;
$handl = $handl + 1;
$zrodlo = $zrodlo + 1;
$userow = $userow + 1;
}
if ($st eq "bl")
{
system "/sbin/iptables -t nat -A POSTROUTING -s $ip -j MASQUERADE";
system "/sbin/iptables -A FORWARD -m mac --mac-source $mac -s $ip -p udp --dport 53 -j ACCEPT";
system "/sbin/iptables -A FORWARD -m mac --mac-source $mac -p tcp --dport 333 -s $ip -d $brama -j ACCEPT";
system "/sbin/iptables -A PREROUTING -t nat -s $ip -p tcp --dport 1:52 -j DNAT --to $brama:333";
system "/sbin/iptables -A PREROUTING -t nat -s $ip -p tcp --dport 54:65535 -j DNAT --to $brama:333";
$zablokowanych = $zablokowanych + 1;
}
system "echo $mac $ip >> /etc/ethers";
}
system "arp -f";Mam nadzieje ze nie wycielam za wiele
przykad pliku /root/netsys/users.list
00:30:AD:83:04:28 ; 172.16.0.137 ; 172.16.0.1 ; ok ; eth0 ; eth1 ; 60 ; 570 ; 250 ; Jan_Kowalski 00:30:CC:83:04:26 ; 172.16.0.138 ; 172.16.0.1 ; bl ; eth0 ; eth1 ; 60 ; 570 ; 250 ; Marek_Kowalki 00:30:CD:23:04:23 ; 172.16.0.139 ; 172.16.0.1 ; ok ; eth0 ; eth1 ; 60 ; 570 ; 250 ; Anna_Nowak 00:40:05:FF:4C:7F ; 172.16.0.145 ; 172.16.0.1 ; ok ; eth0 ; eth1 ; 60 ; 570 ; 250 ; Kszystof_Szczecina_z_rowow_malych
Online

Członek DUG


Dzięki, jak znajdę chwilkę to przetestuje :)
O co chodzi z tym trybem nocnym i do czego to służy?
wjazd dla NAT'u dla wapow z za devila
# -----------[ route_ip.list ]-------------
system "echo > /etc/ethers";
# -----------[ userlista ]-------------
open (PLIK_MISKI, "/root/netsys/users.list") or die "open $alert_file: $!\n";
# tak jak tail -f :)...
# for (;;)
{
sleep 1;
if (seek(PLIK_MISKI,0,1))
{
while (<PLIK_MISKI>)
{
chop;
next if (/^\s*$/); # wyjazd z pustymi liniami
next if (/^#/); # wyjazd z #
if (defined($debugowanie))
# gdy tryb debugowania wyswietlaj wszystko
{print "$_\n";}
if (/\[\*\*\]\s+(.*)\s+\[\*\*\]/)
{
$type=$1;
}
if (/(\S+\:\S+\:\S+\:\S+:\S+:\S+) \; (\d+\.\d+\.\d+\.\d+) \; (\d+\.\d+\.\d+\.\d+) \; (\S+) \; (\S+) \; (\S+) \; (\d+) \; (\d+) \; (\d+) \; (\S+)/)
{ # przyklad xx:xx:xx:xx:xx:xx ; 10.10.10.11 ; 10.10.10.1 ; ok ; imq0 ; pvc0 ; 40 ; 130 ; 60 ; jan kowalski
&mack_sel ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10);
}
} # end while
} # end if seek
} # end for
close PLIK_MISi;Ostatnio edytowany przez Marek_boss (2009-07-30 09:17:16)
Offline




matka przelozona

Członek DUG


Jest jakiś szczególny powód dla którego jest dwa razy to samo?
system "iptables -t mangle -A PREROUTING -i eth0 -j IMQ --todev 0 "; # Download
system "iptables -t mangle -A POSTROUTING -o eth0 -j IMQ --todev 1"; # Upload
system "iptables -t mangle -A PREROUTING -i eth0 -j IMQ --todev 0"; # Download
system "iptables -t mangle -A POSTROUTING -o eth0 -j IMQ --todev 1"; # UploadI do czego to służy?
# wjazd dla NAT'u dla wapow z za devila # -----------[ route_ip.list ]------------- system "echo > /etc/ethers";
Ostatnio edytowany przez Marek_boss (2009-08-01 08:55:16)
Offline




matka przelozona
do 1. - tam byly 2 interfejsy dodatkowe ja na szybko przerabialam to zostalo :]
do 2. to czysci plik /etc/ethers w ktorym puzniej skrypt wpisuje IP i mac miska nastepnie an samym koncuppliku masz polecenie arp -f ktore na podstawie tego pliku robi statyczna tablice arp
Online

Członek DUG


Dzięki za tak szybką odpowiedź.
# - -- ---[ ruch przychodzacy ]--- -- - system "tc qdisc del dev imq1 root handle 1:0 htb 2> /dev/null > /dev/null"; system "tc qdisc add dev imq1 root handle 1:0 htb"; system "tc class add dev imq1 parent 1:0 classid 1:1 htb rate 100mbit ceil 100mbit quantum 1024"; system "tc class add dev imq1 parent 1:1 classid 1:2 htb rate 17mbit ceil 22mbit quantum 1024"; system "tc class add dev imq1 parent 1:1 classid 1:3 htb rate 17mbit ceil 22mbit quantum 1024"; # - -- ---[ ruch wychodzacy ]--- -- - system "tc qdisc del dev imq0 root handle 1:0 htb 2> /dev/null > /dev/null"; system "tc qdisc add dev imq0 root handle 1:0 htb default 10"; system "tc class add dev imq0 parent 1:0 classid 1:1 htb rate 15mbit ceil 15mbit quantum 1024"; system "tc class add dev imq0 parent 1:1 classid 1:2 htb rate 10mbit ceil 10mbit quantum 1024"; system "tc class add dev imq0 parent 1:1 classid 1:4 htb rate 200kbit ceil 200kbit quantum 1024";
Ostatnie pytanie:
system "tc class add dev imq1 parent 1:1 classid 1:2 htb rate 17mbit ceil 22mbit quantum 1024"; system "tc class add dev imq1 parent 1:1 classid 1:3 htb rate 17mbit ceil 22mbit quantum 1024";
Rozumiem, że 22MB do Download łącza?
Dlaczego 1:2 i 1:3 są takie same?
system "tc class add dev imq0 parent 1:0 classid 1:1 htb rate 15mbit ceil 15mbit quantum 1024";
Co to jest to 15MB?
system "tc class add dev imq0 parent 1:1 classid 1:4 htb rate 200kbit ceil 200kbit quantum 1024";
To jest upload dla usera?
Offline




matka przelozona

Członek DUG


U nie on nie działa :(
W skrypcie podałaś:
{ # przyklad xx:xx:xx:xx:xx:xx ; 10.10.10.11 ; 10.10.10.1 ; ok ; imq0 ; pvc0 ; 40 ; 130 ; 60 ; jan kowalskia jako przykładowy users.list:
00:30:AD:83:04:28 ; 172.16.0.137 ; 172.16.0.1 ; ok ; eth0 ; eth1 ; 60 ; 570 ; 250 ; Jan_Kowalski
Który format jest właściwy i co oznacza pvc0?
Pytanie:
Czy taki kod powinien przepuścić bez kolejkowania internet przez taki układ:
LAN ---- eth0 (masquarade) server eth1 ------ świat
ip link set imq0 up ip link set imq1 up iptables -t mangle -A PREROUTING -i eth0 -j IMQ --todev 0 iptables -t mangle -A POSTROUTING -o eth0 -j IMQ --todev 1
Ostatnio edytowany przez Marek_boss (2009-08-01 14:21:38)
Offline




matka przelozona

Członek DUG


To nie działa :(
$brama to jest brama dla usera (w tym przypadku eth0) czy dla serwera (w tym wypadku adres modemu po strone eth1)?
Ostatnio edytowany przez Marek_boss (2009-08-01 14:25:19)
Offline




matka przelozona

Członek DUG


Jeszcze jedno:
system "iptables -t mangle -A PREROUTING -i eth0 -j IMQ --todev 0"; # Download system "iptables -t mangle -A POSTROUTING -o eth0 -j IMQ --todev 1"; # Upload
eth0 oznacza tutaj interface wewnętrzny czy zewnętrzny?
Ostatnio edytowany przez Marek_boss (2009-08-01 18:09:19)
Offline
Użytkownik

Członek DUG


Witam
skrypt nie działa dla interface-u zewnętrznego (nie przycina pasma) a na wewnętrznym strasznie wolno działa. Strasznie długo jest w statusie "Ustalanie adresu serwera np. "www.money.pl".
Gdzie leży problem?
Ostatnio edytowany przez Marek_boss (2009-09-09 10:33:33)
Offline