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!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2016-05-17 00:12:26

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

[SOLVED] Konfiguracja łącz kilku ISP

Bawił się ktoś tutaj konfiguracją łącza kilku ISP? Chodzi generalnie o możliwość osiągnięcia internetu przez dwa interfejsy na kompie. [url=http://www.policyrouting.org/PolicyRoutingBook/ONLINE/CH05.web.html#5.3]Niby sobie czytam t[/url]o ale coś ta książka jest nieco przestarzała. xD Zatrzymałem się w sumie na:

Kod:

 ip route add equalize default \
   nexthop via 1.1.1.30 dev eth1 \
   nexthop via 2.2.2.30 dev eth1

Chciałem dać swoje interfejsy i adresy, tylko system nie chce przyjąć tego [b]equalize[/b] . Niby [url=http://linux.die.net/man/8/ip]tu[/url] piszą, że

equalize
    allow packet by packet randomization on multipath routes. Without this modifier, the route will be frozen to one selected nexthop, so that load splitting will only occur on per-flow base. equalize only works if the kernel is patched.[/quote]
Czyli z tym parametrem pakiety są rozdzielane do kolejnych bramek, a bez niego to strumienie są rozdzielane do osobnych bramek, czyli transfer pliku (jedno połączenie) rozłoży się tylko na łączu jednego ISP. Z kolei [url=http://manpages.ubuntu.com/manpages/xenial/en/man8/ip-route.8.html]tutaj[/url] nie ma w ogóle wzmianki o tym equalize — to jakiś przeżytek w końcu jest? xD

Ostatnio edytowany przez morfik (2016-05-21 22:19:12)

Offline

 

#2  2016-05-17 11:56:55

  mati75 - Psuj

mati75
Psuj
Skąd: default city
Zarejestrowany: 2010-03-14
Serwis

Re: [SOLVED] Konfiguracja łącz kilku ISP

Tworzy się tablice routingu:

http://linux-ip.net/html/routing-tables.html


[img]https://l0calh0st.pl/obrazki/userbar.png[/img]

Offline

 

#3  2016-05-17 13:28:07

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: [SOLVED] Konfiguracja łącz kilku ISP

A z tej wielościeżkowej trasy domyślnej się nie korzysta już? xD

Offline

 

#4  2016-05-17 14:31:09

  mati75 - Psuj

mati75
Psuj
Skąd: default city
Zarejestrowany: 2010-03-14
Serwis

Re: [SOLVED] Konfiguracja łącz kilku ISP

[quote=morfik]A z tej wielościeżkowej trasy domyślnej się nie korzysta już? xD[/quote]
Można, tutaj ładny przykład: http://www.tipsternet.com/articles/advance%20routing.htm

Tylko aktualnie większość sieci buduje się na jednym łącznym i na drugim zapasowym. Przełączanym gdy to pierwsze padnie.


[img]https://l0calh0st.pl/obrazki/userbar.png[/img]

Offline

 

#5  2016-05-17 16:41:06

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: [SOLVED] Konfiguracja łącz kilku ISP

No właśnie problem jest, że to nie działa. Nie przyjmuje w ogóle tego equalize .

Kod:

# ip route add equalize default nexthop via 192.168.1.1 weight 1 nexthop via 10.136.105.1 weight 1
Error: ??? prefix is expected rather than "equalize".

Offline

 

#6  2016-05-17 17:06:43

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: [SOLVED] Konfiguracja łącz kilku ISP

A to jeszcze w sumie mam takie pytanie. Prze /etc/network/interfaces skonfigurowałem sobie dwa interfejsy: bond0 i wwan0 . Na chwilę obecną ustawiłem różne metryki i tak się prezentuje tablica routingu:

Kod:

# ip route show
default via 192.168.1.1 dev bond0  metric 10
default via 10.140.66.161 dev wwan0  metric 100
10.140.66.160/30 dev wwan0  proto kernel  scope link  src 10.140.66.162
192.168.1.0/24 dev bond0  proto kernel  scope link  src 192.168.1.150
192.168.10.0/24 dev br-lxc  proto kernel  scope link  src 192.168.10.100

Chodzi generalnie o testy i zasadę działania. Jak odpalę wiresharka na interfejsie wwan0, to tam nie ma żadnego ruchu. No i to rozumiem, bo bond0 ma mniejszą metrykę i to przez niego leci ruch. Niemniej jednak, na necie pisali, że jak się sprawdza łączność ze światem przez jakąś bramę, to przy ping najlepiej dać przełącznik -I i nazwę interfejsu. Przykładowo:

Kod:

# ping -c 3 -I wwan0 8.8.8.8
PING 8.8.8.8 (8.8.8.8) from 10.140.66.162 wwan0: 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=46 time=33.4 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=46 time=34.2 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=46 time=33.3 ms

--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 33.343/33.670/34.228/0.423 ms

W wiresharku jednak nie ma ruchu żadnego dalej. Czy ktoś wie może dlaczego pakiety lecą przez bond0 w tym przypadku? Przecie wyraźnie się określiło którędy mają lecieć.

Dodatkowo, jak wyciągnę kabel z tego bond0, to połączenia zdychają, mimo, że ten wwan0 działa. Jak się usunie te bramę z bond0, to wtedy połączenie wraca. Jak to wyjaśnić? xD

Ostatnio edytowany przez morfik (2016-05-17 17:10:19)

Offline

 

#7  2016-05-18 13:30:21

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: [SOLVED] Konfiguracja łącz kilku ISP

drobna uwaga: z wielościeżkowych tras korzysta się wyłącznie w przypadkach, gdy wszystkie są równoważne (czyli nie ma różnicy jak puścisz pakiet).   w przypadku kilku isp takiej równoważności nie ma - jeśli nawiązałeś połączenie z jednego interfejsu to musisz z niego korzystać do końca.
nie pamiętam już jak to rozwiązałem (jakieś paręnaście lat temu) ale było tam powiązanie ip docelowy i interfejs...


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

#8  2016-05-18 15:53:38

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: [SOLVED] Konfiguracja łącz kilku ISP

drobna uwaga: z wielościeżkowych tras korzysta się wyłącznie w przypadkach, gdy wszystkie są równoważne (czyli nie ma różnicy jak puścisz pakiet).[/quote]
Jak to rozumieć? Mam jednego ISP i drugiego ISP, puszczam pakiet i co musi być spełnione by korzystać z takiej wielościeżkowej trasy?

Offline

 

#9  2016-05-18 16:00:31

  jurgensen - Użytkownik

jurgensen
Użytkownik
Skąd: Wrocław
Zarejestrowany: 2010-01-26

Re: [SOLVED] Konfiguracja łącz kilku ISP

Przy połączeniach TCP, każdy flow musi iść tą samą ścieżką, bo twój adres IP musi pasować do tego, w nawiązanym już połączeniu (a wybierając inne łącze, o ile nie rozgłaszasz się przez BGP, masz inny adres). Możesz jedynie próbować z połączeniami UDP, ale podejrzewam, że duża część protokołów tak czy siak sprawdza adres IP w wyższych warstwach.

Offline

 

#10  2016-05-18 17:22:27

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: [SOLVED] Konfiguracja łącz kilku ISP

Hmm, to zostawmy na tę trasę wielościeżkową. No to teraz pytanie jest, jak to zrobić w oparciu o trasy routingu? Patrzyłem jak to mwan3 na OpenWRT zrobił i wychodzi na to, że powinienem dodać do pliku /etc/iproute2/rt_tables dwie tablice. Dodałem:

Kod:

10 home
20 lte

Skonfigurowałem sobie dwa interfejsy sieciowe bond0 i wwan0 przez /etc/network/interfaces i podniosłem je oba. Tak wygląda tablica routingu main:

Kod:

# ip route show table main
default via 192.168.1.1 dev bond0  metric 10
default via 10.140.17.21 dev wwan0  metric 100
10.140.17.20/30 dev wwan0  proto kernel  scope link  src 10.140.17.22
192.168.1.0/24 dev bond0  proto kernel  scope link  src 192.168.1.150
192.168.10.0/24 dev br-lxc  proto kernel  scope link  src 192.168.10.100

Te bramki domyślne, co tutaj są, dodałem do osobnych tablic routingu. Ta od bond0 jest w home, a ta od wwan0 w lte:

Kod:

# ip route show table home
default via 192.168.1.1 dev bond0

# ip route show table lte
default via 10.140.17.21 dev wwan0

Czyli w tym momencie wystarczy dodać odpowiednie reguły dla routingu i powinno działać? Patrząc na to co mwan3 uzupełnił na OpenWRT, dodałem parę reguł i wyszło coś takiego:

Kod:

# ip rule show
0:      from all lookup local
1001:   from all iif bond0 lookup main
1002:   from all iif wwan0 lookup main
2002:   from all fwmark 0x2/0xff lookup lte
32766:  from all lookup main
32767:  from all lookup default

Czyli zgodnie z tym powyższym, wszytko co jest oznaczane markiem 0x2/0xff powinno powędrować do tablicy lte, a tam, że jest wpis od bramy domyślnej, to pakiet powinien powędrować przez interfejs wwan0. Pakiety są oznaczane w łańcuchu INPUT tablicy mangle w iptables, czyli przed decyzją o routingu. No ale jest problem, bo to nie działa. xD Połączenia oznaczone mark=2 zwyczajnie nie są realizowane. Tzn. pakiety są wysyłane ale najwyraźniej nie potrafią wrócić:

Kod:

# cat /proc/net/nf_conntrack | grep mark=2
ipv4     2 tcp      6 37 SYN_SENT src=192.168.1.150 dst=185.52.170.19 sport=39142 dport=80 [UNREPLIED] src=185.52.170.19 dst=192.168.1.150 sport=80 dport=39142 mark=2 zone=0 use=2
ipv4     2 tcp      6 116 SYN_SENT src=192.168.1.150 dst=185.52.170.8 sport=56180 dport=80 [UNREPLIED] src=185.52.170.8 dst=192.168.1.150 sport=80 dport=56180 mark=2 zone=0 use=2
ipv4     2 tcp      6 104 SYN_SENT src=192.168.1.150 dst=52.25.175.6 sport=37906 dport=443 [UNREPLIED] src=52.25.175.6 dst=192.168.1.150 sport=443 dport=37906 mark=2 zone=0 use=2

Ciągle mają ten SYN_SENT. W wiresharku mam mnóstwo retransmisji. Czyli coś gdzieś źle jest ustawione albo o czymś zapomniałem, tylko o czym? xD Dlaczego w tych oznaczonych połączeniach jest adres src=192.168.1.150 , on przecie jest powiązany z interfejsem bond0? Ja powinienem tym pakietom jakoś to źródło przepisać w oparciu o coś? xD

EDIT:

Niby dałem:

Kod:

# iptables -S -t nat
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A POSTROUTING -o wwan0 -j MASQUERADE
-A POSTROUTING -o bond0 -j MASQUERADE

W tablicy conntracka są wpisy typu:

Kod:

ipv4     2 tcp      6 431993 ESTABLISHED src=192.168.1.150 dst=5.39.94.136 sport=45186 dport=80 src=5.39.94.136 dst=10.140.17.22 sport=80 dport=45186 [ASSURED] mark=2 zone=0 use=2

I tera działa. To tak ma być?

Ostatnio edytowany przez morfik (2016-05-18 17:32:32)

Offline

 

#11  2016-05-18 21:00:18

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: [SOLVED] Konfiguracja łącz kilku ISP

Chyba jednak ma być z tą maskaradą. Inaczej nie chcą biegać te pakiety. xD Przy okazji udało mi się przy pomocy skryptów dhclient zaprogramować automat, który tworzy odpowiednie tablice routingu i dodaje w nich trasy. Jeszcze mi został do obmyślenia failover i load balancing tych dwóch łącz. Póki co na sztywno ustawiłem marki dla usera 0 i 1000 i niby chodzi:

[img]http://i.imgur.com/fGDWpAn.png[/img]

Offline

 

#12  2016-05-19 22:29:17

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: [SOLVED] Konfiguracja łącz kilku ISP

Warte odnotowania: xD

Kod:

net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2

Offline

 

#13  2016-05-20 11:26:55

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: [SOLVED] Konfiguracja łącz kilku ISP

Mam takie pytanie jeszcze odnośnie tej wielościeżkowej bramy domyślnej. Tak sobie testuje równoważenie połączeń za pomocą tej bramy i coś to nie działa tak jak mi się wydawało, że powinno. xD Wagi są ustawione 1:1, czyli 50% połączeń powinno iść przez jeden interfejs i 50% przez drugi. No to nawiązuje połączenie z pierwszym lepszym serwisem www. No i chyba działa, bo pakiety w wiresharku lecą na obu interfejsach, no bo przecie włażąc na taki serwis www, to się generuje dziesiątki czy setki połączeń.

No to robię drugą próbę, tym razem z pojedynczymi połączeniami. Chcę odpytać o mój IP dwa różne serwisy:

Kod:

$ curl text.whatisyourip.org
$ curl  http://eko.one.pl/host.php

Każdy z nich zwraca inny adres i na wiresharku widać, że pakiety lecą raz przez jeden interfejs, raz przez drugi. Problem w tym, że zawsze w tych serwisach mam ten sam adres IP. xD On się nie zmienia, a przecie wykonuję nowe połączenia. Nie ważne ile połączeń wykonam pod jeden z tych powyższych adresów i tak zawsze będzie mi zwrócony taki sam IP, czyli pakiety idą przez ten sam interfejs. Ktoś umiałby wytłumaczyć dlaczego tak się dzieje? Coś te docelowe adresy IP zapamiętuje i nie zezwala na połączenie z nimi przez kolejny interfejs? Myślałem, że może wpisy w tablicy conntracka ale nawet przy ich ciągłym czyszczeniu pakiety lecą tym samym interfejsem. Jakiś pomysł czym takie zachowanie może być spowodowane?

Offline

 

#14  2016-05-20 18:44:46

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: [SOLVED] Konfiguracja łącz kilku ISP

No to w końcu ustaliłem WTF.

IPv4: Hash-based multipath routing. When the routing cache was removed in 3.6, the IPv4 multipath algorithm changed from more or less being destination-based into being quasi-random per-packet scheduling. This increased the risk of out-of-order packets and made it impossible to use multipath together with anycast services. In this release, the multipath routing implementation is replaced with a flow-based load balancing based on a hash over the source and destination addresses merge commit

-- http://kernelnewbies.org/Linux_4.4[/quote]
Wychodzi na to, że z wypuszczeniem kernela 3.6 usunęli cache routingu, bo był "bee" (mniej niż 10% trafień i otwierał drogę do szeregu ataków). xD Na jego miejsce wprowadzili coś o nazwie "routing exception" ale to też było do dupy, bo było w stanie rozwalić połączenia przesyłając części pakietów przez inne interfejsy. xD Teraz od kernela 4.4 jest cache oparty na hashu, który spina adres źródłowy i docelowy. Każdy pakiet wysłany z określonego adresu IP na pewien adres docelowy zawsze będzie leciał tym samym interfejsem. Dlatego ta wielościeżkowa brama domyślna tak się zachowuje. Jeśli chce się robić bardziej zaawansowany load balancing (wciąż jednak oparty o połączenia, a nie o pakiety), to trzeba jechać na osobnych tablicach routingu, markować pakiety w stanie NEW w iptables i na podstawie tych marków rozdzielać ruch do osobnych interfejsów. No to z tym raczej już nie powinno być problemów, choć jeszcze nie wiem jak losowo markować pakiety różnymi markami ale to było chyba w mwan3. xD

Póki co przetestowałem przydzielając interfejsowi losowe adresy z mojej sieci i faktycznie w końcu zapytanie do serwera w necie poszło przez drugi interfejs.

Tutaj jest jeszcze więcej info: https://lwn.net/Articles/657431/

Ostatnio edytowany przez morfik (2016-05-20 19:29:04)

Offline

 

#15  2016-05-20 19:20:10

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: [SOLVED] Konfiguracja łącz kilku ISP

no i w końcu rozkminiłeś nazwę "iptables" ;)


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

#16  2016-05-20 19:29:38

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: [SOLVED] Konfiguracja łącz kilku ISP

A co tu do rozkminiania? xD

I jeszcze taki bajer znalazłem czytając ten powyższy artykuł:

Kod:

net.ipv4.conf.all.ignore_routes_with_linkdown = 1
net.ipv4.conf.default.ignore_routes_with_linkdown = 1

Ten parametr ignore_routes_with_linkdown włącza failover łącza. Domyślnie jest on ustawiony na 0, gdzie przy zaniku połączenia i ciągle aktywnym interfejsie, przy próbie połączenia zwykle dostaniemy komunikak [b]No route to host[/b]. Jeśli się ten parametr przestawi na 1, wtedy taka trasa zostanie zignorowana i połączenie pójdzie przez drugi interfejs. Oczywiście sesje TCP zostaną uwalone ale np. ping automatycznie zostanie przerzucony na drugie łącze, z utratą może 2-3 pakietów. Fajny bajer, nie trzeba monitorować połączenia. xD

Ostatnio edytowany przez morfik (2016-05-20 19:30:57)

Offline

 

#17  2016-05-21 22:15:33

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: [SOLVED] Konfiguracja łącz kilku ISP

Udało się!!!111one xD

W końcu zaprojektowałem se load balancer 50:50 z markowaniem pakietów w iptables i rozdzielaniem ruchu w oparciu o różne tablice routingu. Całość działa dynamicznie dzięki skryptom dhclienta no i oczywiście jest failover, również automatyczny na poziomie kernela. Nie potrzeba żadnych dodatkowych mechanizmów zbrojących i zabezpieczających na wypadek awarii łącza.

Dla ciekawych, regułki iptables oznaczające pakiety:

Kod:

iptables -t mangle -A qos-egress -m mark --mark 0x0/0xff -m statistic --mode random --probability 0.5 -j MARK --set-xmark 0x2/0xff
iptables -t mangle -A qos-egress -m mark --mark 0x0/0xff -j MARK --set-xmark 0x5/0xff

iptables -t mangle -A qos-ingress -m mark --mark 0x0/0xff -m statistic --mode random --probability 0.5 -j MARK --set-xmark 0x2/0xff
iptables -t mangle -A qos-ingress -m mark --mark 0x0/0xff -j MARK --set-xmark 0x5/0xff

Oczywiście do tego potrzebna jest baza markująca w oparciu o target CONNMARK ale to nie problem raczej. Proporcje łącza można sobie dopasować zmieniając --probability , dzięki któremu iptables markuje mniej więcej 50% nowych połączeń. Pozostałe, które nie zostaną oznaczone, wpadają na drugą regułę i ta już ustawia tym nieoznaczonym pakietom inne marki. I właśnie w oparciu o te marki pakiety lecą do osobnych tablic routingu.

Dobrze, że wyjaśniłem se wcześniej ten cały  --set-xmark , bo by nie szło tego spiąc z TC, a tak to bez problemu te dwa mechanizmy se działają razem. xD Całość wyszła o wiele prościej niż w OpenWRT przy tym całym mwan3.

Oczywiście można w dalszym ciągu przemarkować te pakiety pod kątem usług i dodać dodatkowe reguły w tablicach routingu z wyższym priorytetem i rozdzielić sobie np. www od torrentów między obu ISP. Full wypas. Szkoda tylko, że za 8 dni jeden ISP przestanie mi świadczyć usługi. xD

Offline

 

#18  2016-05-25 11:29:14

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: [SOLVED] Konfiguracja łącz kilku ISP

A i jeszcze taka sprawa odnośnie tego całego routowania. To niesie ze sobą pewne komplikacje, jeśli ktoś np. korzysta z własnego LAN dostępnego przez jednego z tych operatorów. Np. ja mam po drodze domowy router, i połowa połączeń do sieci 192.168.1.0/24 szła by przez drugiego ISP, co oczywiście nie zadziała i trzeba porobić odpowiednie regułki dla tych sieci. Podobnie jest w przypadku korzystania z kontenerów LXC, czy nawet gdy ktoś używa VPN.

Nie wiem czy gdy się odpali VPN to można przesyłać pakiety do obu ISP ale póki co to do tego skryptu co miał aktualizować resolver i blokować zapytania DNS w iptables (/etc/openvpn/update-resolv-conf.sh) musiałem też dodać regułki typu:

Kod:

ip rule add from all table main prio 500
ip rule del from all table main prio 500

Bez tego, ruch omija kompletnie VPN. xD

Ostatnio edytowany przez morfik (2016-05-25 11:30:30)

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)

[ Generated in 0.012 seconds, 12 queries executed ]

Informacje debugowania

Time (s) Query
0.00011 SET CHARSET latin2
0.00004 SET NAMES latin2
0.00090 SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='13.59.183.186' WHERE u.id=1
0.00063 REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '13.59.183.186', 1732994523)
0.00047 SELECT * FROM punbb_online WHERE logged<1732994223
0.00094 DELETE FROM punbb_online WHERE ident='54.36.148.86'
0.00080 SELECT topic_id FROM punbb_posts WHERE id=301572
0.00008 SELECT id FROM punbb_posts WHERE topic_id=28632 ORDER BY posted
0.00061 SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=28632 AND t.moved_to IS NULL
0.00010 SELECT search_for, replace_with FROM punbb_censoring
0.00272 SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=28632 ORDER BY p.id LIMIT 0,25
0.00075 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=28632
Total query time: 0.00815 s