Udostępnienie połączenia internetowego (MASQ)
Kategoria: Artykuły, etykiety: internet, sieć
Dodany: 2009-07-25 15:35
(zmodyfikowany: 2020-03-13 11:31)
Przez: BiExi
Wyświetleń: 120394
Poniższy schemat przedstawia budowę sieci do której będą pisane wszystkie reguły
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
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:
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
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