|
Serwer - ruter, ruch jest tylko jednostronny
rmika - 06-04-2009 14:04
Witam. Mam problem z serwerem, który ma pracować jako ruter. Postępowałem według poniższych wskazówek znalezionych na http://www.dug.net.pl/texty/masq.php
ale jest problem...
Komputer, który jest podpięty do tego rutera nie może nawet pingować rutera, a ruter pinguje ten komputer.
O co chodzi? Chcemy stworzyć taką sieć:
----internet--------eth0-[server]--eth1------sieć lokalna-----
Najpierw musimy skonfigurować prawidłowo interfejsy sieciowe w naszym routerze. Zakładamy że:leth0 - interfejs na świat eth1 - interfejs na sieć lokalnąl
Szczegółowy opis konfiguracji interfejsów sieciowych znajdziesz tutaj.
Mamy 2 możliwości:lNasz usługodawca przydziela nam adres IP dynamicznie, czyli nasz serwer pobiera sam ustawienia adresów od dostawcy. Wtedy nasz plik /etc/network/interfaces będzie wyglądał tak:
auto lo iface lo inet loopback
auto eth0 iface eth0 inet dhcp
auto eth1 iface eth1 inet static address 192.168.1.1 netmask 255.255.255.0
l
lMamy na umowie z naszym dostawcą internetu informacje o IP, masce sieci, network, bramie; wtedy nasz plik /etc/network/interfaces będzie wyglądał tak:
auto lo iface lo inet loopback
auto eth0 iface eth0 inet static address adres_ip_z_umowy netmask maska_sieci_z_imowy network adres_sieci_Z_umowy gateway brama_z_umowy
auto eth1 iface eth1 inet static address 192.168.1.1 netmask 255.255.255.0
Nasz plik /etc/resolv.conf powinien wyglądać tak:
nameserver 194.204.152.34 nameserver 194.204.159.1
Teraz restartujemy ustawienia interfejsów wydając polecenie
/etc/init.d/networking restart
Sprawdzamy czy wszystko działa poprawnie, czyli czy na serwerze mamy internet. Piszemy np.
ping google.pl
Jeśli dostaniemy np. coś w tym stylu
PING google.pl (216.239.57.99): 56 data bytes 64 bytes from 216.239.57.99: icmp_seq=0 ttl=239 time=207.4 ms 64 bytes from 216.239.57.99: icmp_seq=1 ttl=239 time=204.8 ms
Tzn. że internet nam działa na serwerze. Teraz zajmiemy się udostępnianiem połączenia internetowego dla sieci lokalnej - tworzymy plik /etc/init.d/firewall i nadajemy mu uprawnienia do uruchamiania:
chmod +x /etc/init.d/firewall
oraz edytujemy ww. plik wpisując do niego przykładowa zawartość # wlaczenie w kernelu forwardowania echo 1 > /proc/sys/net/ipv4/ip_forward # czyszczenie starych regul iptables -F iptables -X iptables -t nat -X iptables -t nat -F # ustawienie polityki dzialania iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT # zezwolenie nna laczenie sie z naszym zewnetrznym ip po ssh
iptables -A INPUT -i lo -j ACCEPT iptables -A FORWARD -o lo -j ACCEPT
iptables -A INPUT -s 0/0 -d ip.ip.ip.ip -p tcp --dport 22 -j ACCEPT iptables -A OUTPUT -s 0/0 -d ip.ip.ip.ip -p tcp --dport 22 -j ACCEPT iptables -A INPUT -s 0/0 -d ip.ip.ip.ip -p udp --dport 22 -j ACCEPT iptables -A OUTPUT -s 0/0 -d ip.ip.ip.ip -p udp --dport 22 -j ACCEPT # polaczenia nawiazane iptables -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED iptables -A FORWARD -j ACCEPT -m state --state ESTABLISHED,RELATED iptables -A OUTPUT -j ACCEPT -m state --state ESTABLISHED,RELATED # udostepniaie internetu w sieci lokalnej iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT
Zapisujemy plik. Zamiast ip.ip.ip.ip wpisujemy IP zewnętrzne naszego serwera. Wydajemy jeszcze polecenie, które spowoduje ze ww. skrypt będzie się uruchamiał przy starcie systemu:
update-rc.d firewall defaults 20
Teraz konfiguracja stanowisk w sieci
Sprawdzamy czy wszystko nam działa poprawnie - uruchamiamy skrypt poleceniem:
/etc/init.d/firewall
i w sumie to jest najprostsza metoda udostępniania połączenia.l
Ister - 06-04-2009 14:07
Wrzuć jak wygląda Twój firewall, bo inaczej wróżymy z fusów. Ale pewnikiem tu jest problem.
rmika - 06-04-2009 14:09
# wlaczenie w kernelu forwardowania echo 1 > /proc/sys/net/ipv4/ip_forward # czyszczenie starych regul iptables -F iptables -X iptables -t nat -X iptables -t nat -F # ustawienie polityki dzialania iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT # zezwolenie nna laczenie sie z naszym zewnetrznym ip po ssh
iptables -A INPUT -i lo -j ACCEPT iptables -A FORWARD -o lo -j ACCEPT
iptables -A INPUT -s 0/0 -d 10.0.0.200 -p tcp --dport 22 -j ACCEPT iptables -A OUTPUT -s 0/0 -d 10.0.0.200 -p tcp --dport 22 -j ACCEPT iptables -A INPUT -s 0/0 -d 10.0.0.200 -p udp --dport 22 -j ACCEPT iptables -A OUTPUT -s 0/0 -d 10.0.0.200 -p udp --dport 22 -j ACCEPT # polaczenia nawiazane iptables -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED iptables -A FORWARD -j ACCEPT -m state --state ESTABLISHED,RELATED iptables -A OUTPUT -j ACCEPT -m state --state ESTABLISHED,RELATED # udostepniaie internetu w sieci lokalnej iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT
ja juz wszystko skopiowałem w desperacji
Ister - 06-04-2009 14:47
Ok, poproszę jeszcze wyniki komend:
cat /etc/network/interfaces ifconfig ifconfig -a
rmika - 06-04-2009 14:55
/etc/network/interfaces # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5).
# The loopback network interface auto lo iface lo inet loopback
# Wejsciowe lacze auto eth0 iface eth0 inet static address 10.0.0.199 netmask 255.255.255.0 gateway 10.0.0.200
#wyscie
auto eth1 iface eth1 inet static address 192.168.1.200 netmask 255.255.255.0
ifconfig eth0 Link encap:Ethernet HWaddr 00:1d:7d:e5:7b:c8 inet addr:10.0.0.199 Bcast:10.0.0.255 Mask:255.255.255.0 inet6 addr: fe80::21d:7dff:fee5:7bc8/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:19764 errors:0 dropped:0 overruns:0 frame:0 TX packets:583 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1838918 (1.7 MiB) TX bytes:68588 (66.9 KiB) Interrupt:23 Base address:0x2000
eth1 Link encap:Ethernet HWaddr 00:30:4f:1c:c3:37 inet addr:192.168.1.200 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::230:4fff:fe1c:c337/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:17671 errors:0 dropped:0 overruns:0 frame:0 TX packets:422 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1617092 (1.5 MiB) TX bytes:56936 (55.6 KiB) Interrupt:20 Base address:0xde00
lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:67 errors:0 dropped:0 overruns:0 frame:0 TX packets:67 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:6112 (5.9 KiB) TX bytes:6112 (5.9 KiB)
ifconfig -a eth0 Link encap:Ethernet HWaddr 00:1d:7d:e5:7b:c8 inet addr:10.0.0.199 Bcast:10.0.0.255 Mask:255.255.255.0 inet6 addr: fe80::21d:7dff:fee5:7bc8/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:19795 errors:0 dropped:0 overruns:0 frame:0 TX packets:583 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1841610 (1.7 MiB) TX bytes:68588 (66.9 KiB) Interrupt:23 Base address:0x2000
eth1 Link encap:Ethernet HWaddr 00:30:4f:1c:c3:37 inet addr:192.168.1.200 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::230:4fff:fe1c:c337/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:17702 errors:0 dropped:0 overruns:0 frame:0 TX packets:422 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1619784 (1.5 MiB) TX bytes:56936 (55.6 KiB) Interrupt:20 Base address:0xde00
lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:67 errors:0 dropped:0 overruns:0 frame:0 TX packets:67 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:6112 (5.9 KiB) TX bytes:6112 (5.9 KiB)
zapomniałem napisać, że ten router jest na razie postawiony w sieci lokalnej na siec lokalną... na razie
mariaczi - 06-04-2009 15:23
Na maszynie, która ma udostępniać internet włączyłeś domyślną politykę na DROP iptables -P INPUT DROP
stąd końcówki nie mogą pingować tej maszyny.
Edit: Maleńka rada. Najpierw udostępnij internet dalej, potem pracuj nad firewallem. Dla samego udostępnienia wystarczy włączenie ip_forward oraz NAT i oczywiście poprawne skonfigurowanie kart sieciowych.
rmika - 06-04-2009 16:16
No wiesz... z chęcią bym tego firewalla nie uruchamiał ale myślałem, że tak musi być. Powiedz mi jak mam włączyć ip_forward oraz NAT.
Ps. Czy ten wpis w firewallu nie odpowiada za włączenie ip_forward:
# wlaczenie w kernelu forwardowania echo 1 > /proc/sys/net/ipv4/ip_forward
Ister - 06-04-2009 16:50
za ip_forward tak, za NAT nie. za nat odpowiada linijka z tabelą nat.
Pomijając już nawet fakt, że nie dalej jak 2-3 dni temu TEN SAM problem był tu rozwiązywany zastanów się nad taką rzeczą: Komputer łączący się ze światem przez Twój router NAJPIERW musi połączyć się z routerem. A to mu już uniemożliwiasz.
Musisz umożliwić połączenia przychodzące na adres 192.168.1.200 z sieci lokalnej.
A co do "bez firewalla" - wystarczy, że ustawisz politykę na ACCEPT zamiast DROP i będzie działać. Co nie znaczy, że to dobre rozwiązanie. Lepiej zdecydowanie mieć chodzący, dobrze skonfigurowany firewall.
Yampress - 06-04-2009 19:17
Jeśli chcesz pingować server to musisz wpuścić tylko protokół icmp na łańcuchu input. Typy wiadmości icmp 8 - (Echo Request), bez zmiany domyslnej polityki w tym łańcuchu, która ma byc ustawiona na DROP
iptables -A INPUT -i eth0 -p icmp --icmp-type echo-request -j ACCEPT
rmika - 06-04-2009 20:49
wiecie tylko tak ja napisałem na początku... na pingu mi aż tak nie należy jak na dostępie do internetu..
bzyk - 06-04-2009 21:52
No to zrób;
echo 1 > /proc/sys/net/ipv4/ip_forward iptables -F iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
I będziesz miał tego neta. A potem czytać, czytać, czytać... Będziesz już miał dostęp do sieci to i o firewallach sobie poczytasz :)[/code]
Yampress - 06-04-2009 22:19
no ale może tak napiszesz co CI nie działa i co chcesz osiągnać bo ja nie rozumiem. Chcesz dzielić internet innym komputerom w sieci? masz stałe zewnątrzene ip czy dynamicznie przydzielane zewnętrzne ip ?
sprawa wygląda tak
na poczatek włączamy przekazywanie pakietów echo "1" > /proc/sys/net/ipv4/ip_forward
nastepnie skrypt firewalla
#usunięcie regół ze wszystkich łańcuchów iptables -F
#ustawianie domyslnych polityk iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT
#intrefejs pętli zwrotnej iptables -A INPUT -i lo -j ACCEPT
#wpyszczamy ruch na ssh iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#wpuszczamy zapytania o pinga iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
#pozwalamy na fowarding iptables -A FORWARD -s 192.168.1.0/24 -d 0.0.0.0/0 -j ACCEPT iptables -A FORWARD -s 0.0.0.0/0 -d 192.168.1.0/24 -j ACCPET
i teraz sa sa 2 możłiwości:
1. zmienne ip zewnętrzene iptables -t nat -A POSTROUTING -s 192.168.1.2 -d 0.0.0.0/0 -j MASQUERADE
2. stałe ip zewnętrzne iptables -t nat -A POSTROUTING -s 192.168.1.2 -d 0.0.0.0/0 -j SNAT --to-source nasz_stały_adres_ip
rmika - 07-04-2009 14:25
Dobrze, pora na podsumowanie.
Abym miał internet udostępniony wystarczy w pliku konfiguracyjnym dodać wpis:
echo "1" > /proc/sys/net/ipv4/ip_forward
I działa.
Nie działa natomiast internet w momencie gdy w pliku konfiguracyjnym firewallu dodam:
iptables -P INPUT DROP iptables -P FORWARD DROP
Te wpisy momentalnie mi "psują" politykę dostępową i nie mam już internetu. Nawet usunięcie tych wpisów i ponowne załadowanie ustawień firewalla nie pomagają. Muszę restartować system.
Ps. W konfiguracji mam też dodany wpis:
iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT
Wiecie może dlaczego wpisy:
iptables -P INPUT DROP iptables -P FORWARD DROP
totalnie mi blokują wszystko?
Ister - 07-04-2009 14:31
Wpis Wypuszcza ruch z sieci. Jednak pamiętaj, że ruch jest dwukierunkowy, to znaczy router musi jeszcze wpuścić odpowiedź. Do tego służą albo odpowiednie state (ESTABILISHED, RELATED), albo jawne przepuszczenie całego ruchu w drugą stronę (-d 192.168.1.0/24).
Czy od ostatniego pełnego pliku firewalla coś zmieniałeś? Domyślam się, że tak.
Acha - sama likwidacja wpisów iptables -P INPUT DROP iptables -P FORWARD DROP
nie powoduje odwrócenia ich działania. Przecież ten plik ZMIENIA ustawienia iptables, a nie USTALA je od zera. ÂŻeby przywrócić działanie (politykę ACCEPT0 musisz w miejsce powyższego wpisu umieścić iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT
rmika - 08-04-2009 09:43
Teraz już chyba rozumiem wszystko. [b]I[wszystko mi działa. Ale dla pewności opiszę wszystko jak mam ustawione z nadzieją, że ktoś wyłapie mi błędy i poprawi.
Na serwerze mam następującą konfigurację:
eth0 Link encap:Ethernet HWaddr 00:1d:7d:e5:7b:c8 inet addr:10.0.0.199 Bcast:10.0.0.255 Mask:255.255.255.0 inet6 addr: fe80::21d:7dff:fee5:7bc8/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:114962 errors:0 dropped:0 overruns:0 frame:0 TX packets:17768 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:30191516 (28.7 MiB) TX bytes:2719755 (2.5 MiB) Interrupt:23 Base address:0xa000
eth1 Link encap:Ethernet HWaddr 00:30:4f:1c:c3:37 inet addr:192.168.1.200 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::230:4fff:fe1c:c337/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:111236 errors:0 dropped:0 overruns:0 frame:0 TX packets:22155 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:10450023 (9.9 MiB) TX bytes:16971656 (16.1 MiB) Interrupt:20 Base address:0xde00
lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:93 errors:0 dropped:0 overruns:0 frame:0 TX packets:93 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:12812 (12.5 KiB) TX bytes:12812 (12.5 KiB)
Mój komputer na przypisany adres 192.168.1.2
Pora na ustawienia firewalla:
# Pozwol na dzielenie lacza echo "1" > /proc/sys/net/ipv4/ip_forward
# Uruchom maskarade iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
# Skasuje wszystkie stare reguly iptables -F
#domyslne polityki iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT
## pozwol na utrzymywanie polaczen iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
## pozwolenia na laczenie sie Mi z serweren przez ssh iptables -A INPUT -s 192.168.1.2 -p tcp --dport 22 -j ACCEPT iptables -A INPUT -s 192.168.1.2 -p udp --dport 22 -j ACCEPT
# Pozwol nizej wymieninym hostom na dostep do internetu iptables -A FORWARD -s 192.168.1.2 -j ACCEPT iptables -A FORWARD -s 192.168.1.3 -j ACCEPT
## dla pewnosci blokuj wszystkich innych iptables -A FORWARD -s 192.168.1.0/24 -j DROP
Ister - 08-04-2009 13:15
Zrobiłbym pewne poprawki. Po pierwsze - usuwanie starych reguł zasadniczo najlepiej jest zrobić zanim wprowadzi się nowe ;-) To co wpisałeś wprawdzie działa, ale tylko dlatego, że nie wszystko usuwasz. Zatem iptables -F
Wyrzuć na początek skryptu i uzupełnij o linijkę iptables -t nat -F
Możesz też dodać iptables -X iptables -t nat -X
Następnie blokuj dostęp, czyli ustaw polityki. Zatem jako kolejne idą te linijki: iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT
Dopiero teraz czas na ustawianie wpuszczania, maskaradę itp.
Wreszcie ostatnia linijka iptables -A FORWARD -s 192.168.1.0/24 -j DROP
nie ma najmniejszego sensu. Masz politykę DROP. Jeśli czegoś jawnie nie wypuściłeś, to zostanie zdropowane. Dokładasz tylko pracy routerowi.
Tyle moich uwag. Pozdrawiam
zanotowane.pldoc.pisz.plpdf.pisz.plminister.pev.pl
|