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.
Najpierw musimy skonfigurować prawidłowo interfejsy sieciowe w naszym routerze. Zakładamy że:
eth0 - interfejs na świat
eth1 - interfejs na sieć lokalną
Szczegółowy opis konfiguracji interfejsów sieciowych znajdziesz tutaj.
Mamy 2 możliwości:
Nasz 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:
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:
# 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:
# 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
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.
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.
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