Udostępnienie połączenia internetowego (MASQ)

Kategoria: Artykuły, etykiety: internet, sieć

Dodany: 2009-07-25 15:35 (zmodyfikowany: 2013-08-28 19:59)
Przez: BiExi

Wyświetleń: 98099

Poniższy schemat przedstawia budowę sieci do której będą pisane wszystkie reguły

Schemat1

gdzie:

eth0 interfejs wyjścia na świat

eth1 interfejs od strony naszej sieci lokalnej

Kilka słów na temat konfiguracji interfejsu eth0 mianowicie mamy następujące możliwości:

  • Adres IP będzie przyznany po dhcp
  • Ustawimy adres IP statycznie
  • Istnieje jeszcze możliwość łączenia się za pomocą połączeń tunelowanych takich jak PPPoE ale nie będe tutaj rozważać tego przypadku.

eth0 - adres IP z dhcp

Edytujemy plik /etc/network/interfaces modyfikujemy wpis dotyczący interfejsu eth0 w następujący sposób

auto eth0
iface eth0 inet dhcp

Wpis auto mówi że interfejs będzie podnoszony wraz z startem systemu.

Słowo po wyrażeniu inet określa sposób w jaki ma być ustawiona sieć tutaj adres IP ma pochodzić od serwera dhcp

eth0 - adres IP ustawiony statycznie

Edytujemy plik /etc/network/interfaces modyfikujemy wpis dotyczący interfejsu eth0 w następujący sposób

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

W tym przypadku po słowie inet występuje zwrot static mówi on że adres IP będzie ustawiony ręcznie Podajemy tutaj następujące dane:

  • address - przyznany nam adres IP
  • netmask - maska sieci określa liczbę komputerów w danej podsieci
  • network - adres sieci - pierwszy adres IP z danej klasy
  • gateway - domyślna brama - adres IP routera który daje nam internet.

np:

auto eth0
iface eth0 inet static
       address 217.96.37.40
       netmask 255.255.255.192
       network 217.96.37.0
       gateway 217.96.37.11

konfiguracja interfejsu LAN (eth1)

Poniższy schemat obrazuje jak będą adresowane komputery w sieci lokalnej

Schemat2

Edytujemy plik /etc/network/interfaces modyfikujemy wpis dotyczący interfejsu eth1 w następujący sposób

auto eth1
iface eth1 inet static
        address 192.168.1.1
        netmask 255.255.255.0

Aby zakończyć konfiguracje sieci na serwerze pozostało nam jeszcze tylko...

Ustawienie serwera DNS

Tutaj w zależności od operatora pośredniczącego wpisy w pliku /etc/resolv.conf będą wyglądać:

tpsa

nameserver 194.204.152.34
nameserver 194.204.159.1

netia

nameserver 213.241.79.38
nameserver 213.214.79.37
nameserver 83.238.255.76

exatel

nameserver 213.172.186.5
nameserver 213.172.186.4

UPC

nameserver 62.179.1.63
nameserver 62.179.1.62

Test ustawień

Restartujemy ustawienia interfejsów sieciowych na serwerze

/etc/init.d/networking restart

Sprawdzamy czy działa internet na serwerze

ping www.google.pl -c 4

Jeśli mamy odpowiedz z google

PING www.l.google.com (74.125.39.147) 56(84) bytes of data.
64 bytes from fx-in-f147.google.com (74.125.39.147): icmp_seq=1 ttl=239 time=39.5 ms
64 bytes from fx-in-f147.google.com (74.125.39.147): icmp_seq=2 ttl=239 time=39.6 ms
64 bytes from fx-in-f147.google.com (74.125.39.147): icmp_seq=3 ttl=239 time=41.0 ms
64 bytes from fx-in-f147.google.com (74.125.39.147): icmp_seq=4 ttl=239 time=39.9 ms

--- www.l.google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3010ms
rtt min/avg/max/mdev = 39.582/40.070/41.062/0.610 ms

Znaczy że wszystko jest ok

Udostępnienie połączenia

Sedno sprawy tworzymy plik /etc/init.d/firewall

touch /etc/init.d/firewall

zmieniamy mu uprawnienia by był wykonywalny

chmod +x /etc/init.d/firewall

edytujemy go w ulubionym edytorze i wpisujemy poniższą 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
iptables -t mangle -F
iptables -t mangle -X

# ustawienie domyslnej polityki
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

# utrzymanie polaczen nawiazanych
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

Jest to najprostszy nie zabezpieczony skrypt pozwalający na udostępnienie internetu

Teraz kilka słów objaśnienia

forwardowanie - po włączeniu tej funkcji w kernelu będzie on przekazywał pakiety między interfejsami jest to niezbędne by móc udostępnić internet

Ustawienie domyślnej polityki - mówimy systemowi jak ma domyślnie traktować poszczególne pakiety tutaj wszystko jest akceptowane

Udostępnienie internetu w tym przypadku udostępniane jest połączenie dla wszystkich komputerów w naszej podsieci mówi o tym wpis -s 192.168.1.0/24 jest to adres sieci z prefixem (skrucona postać maski sieci) gdzie: /24 = /255.255.255.0

Jeśli chcielibyśmy udostępnić internet tylko komputerom z adresami IP podanymi na schemacie to zamiast pisać:

# 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

Napisalibyśmy

# udostepniaie internetu w sieci lokalnej
iptables -t nat -A POSTROUTING -s 192.168.1.10/32 -j MASQUERADE
iptables -A FORWARD -s 192.168.1.10/32 -j ACCEPT

iptables -t nat -A POSTROUTING -s 192.168.1.11/32 -j MASQUERADE
iptables -A FORWARD -s 192.168.1.11/32 -j ACCEPT

iptables -t nat -A POSTROUTING -s 192.168.1.12/32 -j MASQUERADE
iptables -A FORWARD -s 192.168.1.12/32 -j ACCEPT

Nie będę się tutaj rozpisywać na temat poszczególnych łańcuchów w iptables bo jest to temat na kolejny artykuł Zmodyfikujemy troszeczkę nasz skrypt zabezpieczymy się dzięki temu przed atakami na naszą sieć/serwer

# wlaczenie w kernelu forwardowania 
/bin/echo 1 > /proc/sys/net/ipv4/ip_forward
# Ochrona przed atakiem typu Smurf
/bin/echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# Nie aktceptujemy pakietow "source route"
/bin/echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
# Nie przyjmujemy pakietow ICMP rediect, ktore moga zmienic tablice routingu
/bin/echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
# Wlaczamy ochrone przed blednymi komunikatami ICMP error
/bin/echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
# Wlaczenie mechanizmu wykrywania oczywistych falszerstw 
# (pakiety znajdujace sie tylko tablicy routingu)
/bin/echo 65536 > /proc/sys/net/ipv4/netfilter/ip_conntrack_max
/bin/echo 36024 > /proc/sys/net/ipv4/tcp_max_syn_backlog
# zwiekszenie rozmaru tablicy ARP
/bin/echo 1024 > /proc/sys/net/ipv4/neigh/default/gc_thresh1
/bin/echo 4096 > /proc/sys/net/ipv4/neigh/default/gc_thresh2
/bin/echo 8192 > /proc/sys/net/ipv4/neigh/default/gc_thresh3
# Blokada przed atakami typu SYN FLOODING
/bin/echo 1 > /proc/sys/net/ipv4/tcp_syncookies
# Właczenie proxy arp - dzieki temu serwer nie zdycha po kilku
#/bin/echo 1 > /proc/sys/net/ipv4/conf/all/arp_filter
# Zwiekszenie rozmiarutablic routingu
/bin/echo "18192" > /proc/sys/net/ipv4/route/max_size

# czyszczenie starych regul
iptables -F
iptables -X
iptables -t nat -X
iptables -t nat -F
iptables -t mangle -F
iptables -t mangle -X

# ustawienie domyslnej polityki
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

iptables -A INPUT -m conntrack --ctstate NEW -p tcp --tcp-flags SYN,RST,ACK,FIN,URG,PSH ACK -j DROP
iptables -A INPUT -m conntrack --ctstate NEW -p tcp --tcp-flags SYN,RST,ACK,FIN,URG,PSH FIN -j DROP
iptables -A INPUT -m conntrack --ctstate NEW -p tcp --tcp-flags SYN,RST,ACK,FIN,URG,PSH FIN,URG,PSH -j DROP


# utrzymanie polaczen nawiazanych
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

Kolejną czynnością jest ustawienie by nasz skrypt firewall startował wraz z systemem wydajemy polecenie:

update-rc.d firewall defaults 20

Odpalamy ręcznie nasz skrypt

/etc/init.d/firewall

Testy

Możemy przystąpić do testów na komputerach ustawiamy odpowiednio adresy IP, maskę i bramę jak na schemacie DNS ustawiamy wg naszego pośrednika analogicznie jak dla serwera

Pojawia się pytanie jak testować czy wszystko jest ok

Musimy sprawdzić czy wszystko jest poprawnie spięte z komputera w sieci lokalnej próbujemy pingować serwer

ping 192.168.1.1 

jeśli mamy odpowiedzi znaczy się że komunikacja między komputerem a serwerem jest ok.

W przeciwnym wypadku brak odpowiedzi lub komunikaty upłynął limit czasu... sprawdzamy:

  • czy poprawnie ustawiliśmy IP na komputerach i na serwerze LAN
  • sprawdzić stan okablowania czy jest ok
  • sprawdzamy stan switcha czy jest załączony i działa prawidłowo

Jeśli pierwszy test przeszedł pomyślnie sprawdzamy z komputera w sieci lokalnej:

ping www.google.pl

Jeśli jest odpowiedz znaczy że wszystko działa i możemy się cieszyć internetem :]

W przeciwnym przypadku sprawdzamy:

  • czy na komputerze w sieci ustawiliśmy poprawnie bramę
  • czy w pliku firewalla nie ma jakiejś literówki
  • czy na komputerze w sieci lan mamy wpisane poprawnie serwery DNS

Przypadki często poruszane na forum

Spotkałam się z pytaniami Jak udostępnić internet w takim przypadku gdzie są 2 karty LAN jak na schemacie:

Schemat1

Tutaj należy zwrócić uwagę że komputer nr4 jest bezpośrednio podłączony do serwera należy użyć do tego kabla krasowanego

Pierwszym krokiem jest ustawienie poprawnie adresów IP

Schemat1

Na serwerze trzeba zmodyfikować wpisy dotyczące ustawień kart sieciowych w pliku etc/network/interfaces

auto eth1
iface eth1 inet static
        address 192.168.1.1
        netmask 255.255.255.0

auto eth2
iface eth1 inet static
        address 192.168.2.1
        netmask 255.255.255.0

W pliku odpowiedzialnym za udostępnianie internetu (/etc/init.d/firewall) wpisy będą zmodyfikowane w następujący sposób

# 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

iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j MASQUERADE
iptables -A FORWARD -s 192.168.2.0/24 -j ACCEPT

Po dokonaniu modyfikacji ustawień restartujemy konfiguracje kart sieciowych

/etc/init.d/networking restart

I uruchamiamy skrypt firewalla

/etc/init.d/firewall

Możemy przystąpić do testów analogicznie jak dla przykładu pierwszego

server dhcp

Aby nie musieć ustawiać ręcznie adresów IP uruchomimy serwer dhcp. Instalujemy potrzebne pakiety

aptitude install dhcp3-server

Przykład z 1 kartą LAN

Modyfikujemy plik konfiguracyjny odpowiedzialny za wskazanie interfejsu na którym serwer będzie "rozdawał" adresy IP /etc/default/dhcp3-server ustawiamy w nim

INTERFACES="eth1"

Dla przykładu 1 czyli z jedną kartą LAN plik konfiguracyjny serwera /etc/dhcp3/dhcpd.conf będzie wyglądał tak:

  ddns-update-style ad-hoc;

subnet 192.168.1.0 netmask 255.255.255.0 {
  range  192.168.1.10  192.168.1.20;
  default-lease-time 3600;
  option domain-name "ble.pl";
  option domain-name-servers 213.241.79.38, 213.241.79.37, 83.238.255.76;
  option netbios-name-servers  192.168.1.1;
  option routers  192.168.1.1;
  option subnet-mask 255.255.255.0;
  option broadcast-address  192.168.1.255;

}

Krótkie objaśnienie

  • default-lease-time - określa czas dzierżawy czyli na ile dany komputer otrzymuje adres IP po tym czasie komputer wysyła prośbę o przedłużenie dzierżawy
  • domain-name-servers - adresy serwerów DNS jakich chcemy używać w sieci (dostosować wg pośrednika od którego mamy internet)
  • netbios-name-servers - jeśli mamy w sieci serwer samby np na naszym routerku ustawiamy go jako główny serwer wins dzięki czemu otoczenie sieciowe zawsze będzie widoczne.
  • routers - domyślna brama
  • subnet-mask - maska sieci
  • broadcast-address - adres rozgłoszeniowy

Jest jeszcze opcja:

range

Po której podany jest zakres adresów IP w naszym przypadku od 192.168.1.10 do 192.168.1.20 które będą przydzielane poszczególnym komputerom

Restartujemy usługe

/etc/init.d/dhcp3-server start

W powyższej konfiguracji jest jeden szkopuł mianowicie komp1 nie zawsze będzie miał ten sam adres IP można na sztywno "przywiązać" IP do danego hosta po jego adresie fizycznym (MAC)

Załóżmy:

  • 00:30:4F:34:EC:A1 - mac komp 1
  • 00:0B:6A:86:1C:0D - mac komp 2
  • 00:4F:4E:14:CE:1F - mac komp 3

plik /etc/dhcp3/dhcpd.conf

  ddns-update-style ad-hoc;

subnet 192.168.1.0 netmask 255.255.255.0 {
  option domain-name "ble.pl";
  option domain-name-servers 213.241.79.38, 213.241.79.37, 83.238.255.76;
  option netbios-name-servers  192.168.1.1;
  option routers  192.168.1.1;
  option subnet-mask 255.255.255.0;
  option broadcast-address  192.168.1.255;

    host komp1 {
        hardware ethernet 00:30:4F:34:EC:A1;
        fixed-address  192.168.1.10;
    }

    host komp2 {
        hardware ethernet 00:0B:6A:86:1C:0D;
        fixed-address  192.168.1.11;
    }

    host komp3 {
        hardware ethernet 00:4F:4E:14:CE:1F;
        fixed-address  192.168.1.12;
    }
}

Jak widać pojawiły się sekcje host dla poszczególnych komputerów myślę że zapis jest jasny. Zniknął wpis range celowo go usunęłam, w takiej konfiguracji adresy IP będą dostawać tylko "dopisane" komputery po dodaniu w/w wpisu i ustawieniu zakresu np: 192.168.1.50 do 192.168.1.100 pozostałe hosty które nie są dopisane będą dostawać adres z wskazanego zakresu.

Przykład z 2 kartami LAN

w pliku /etc/default/dhcp3-server ustawiamy:

INTERFACES="eth1 eth2"

edytujemy plik serwera dhcp /etc/dhcp3/dhcpd.conf

  ddns-update-style ad-hoc;
shared-network sharedname {

 subnet 192.168.1.0 netmask 255.255.255.0 {
    range  192.168.1.10  192.168.1.20;
    default-lease-time 3600;
    option domain-name "ble.pl";
    option domain-name-servers 213.241.79.38, 213.241.79.37, 83.238.255.76;
    option netbios-name-servers  192.168.1.1;
    option routers  192.168.1.1;
    option subnet-mask 255.255.255.0;
    option broadcast-address  192.168.1.255;

  }

 subnet 192.168.2.0 netmask 255.255.255.0 {
    range  192.168.2.10  192.168.2.20;
    default-lease-time 3600;
    option domain-name "ble.pl";
    option domain-name-servers 213.241.79.38, 213.241.79.37, 83.238.255.76;
    option netbios-name-servers  192.168.2.1;
    option routers  192.168.2.1;
    option subnet-mask 255.255.255.0;
    option broadcast-address  192.168.2.255;

  }

}

Gdy korzystamy z więcej jak jednej podsieci używamy dyrektywy shared-network sharedname { } w której ustawiamy poszczególne podsieci subnet działa to analogicznie jak w pierwszym przykładzie

Teraz chielbyśmy na stałe przypisać adresy IP plik konfiguracyjny będzie wyglądał tak:

  ddns-update-style ad-hoc;
shared-network sharedname {

 subnet 192.168.1.0 netmask 255.255.255.0 {
    range  192.168.1.10  192.168.1.20;
    default-lease-time 3600;
    option domain-name "ble.pl";
    option domain-name-servers 213.241.79.38, 213.241.79.37, 83.238.255.76;
    option netbios-name-servers  192.168.1.1;
    option routers  192.168.1.1;
    option subnet-mask 255.255.255.0;
    option broadcast-address  192.168.1.255;

    host komp1 {
        hardware ethernet 00:30:4F:34:EC:A1;
        fixed-address  192.168.1.10;
    }

    host komp2 {
        hardware ethernet 00:0B:6A:86:1C:0D;
        fixed-address  192.168.1.11;
    }

  }

 subnet 192.168.2.0 netmask 255.255.255.0 {
    range  192.168.2.10  192.168.2.20;
    default-lease-time 3600;
    option domain-name "ble.pl";
    option domain-name-servers 213.241.79.38, 213.241.79.37, 83.238.255.76;
    option netbios-name-servers  192.168.2.1;
    option routers  192.168.2.1;
    option subnet-mask 255.255.255.0;
    option broadcast-address  192.168.2.255;

    host komp3 {
        hardware ethernet 00:4F:4E:14:CE:1F;
        fixed-address  192.168.1.12;
    }

  }

}

Pamiętamy o restartowaniu usług po zmianie konfiguracji na koniec restartujemy wszystko i możemy zabierać się do testów

/etc/init.d/networking restart

/etc/init,d/firewall

/etc/init.d/dhcp3-server restart

OSnews Wykop Blip Flaker Kciuk Śledzik Facebook Identi.ca Twitter del.icio.us Google Bookmarks