Tablica routingu

Teoria i zasady dzia┐ania statycznego routingu zostan┐ omˇwione na zajeciach.


W┐┐czenie przekazywania pakietˇw

Dodanie adresu do karty sieciowej tap0 (komunikacja z guest0) na maszynie template:

root@template:~# ip address show dev tap0
4: tap0:  mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 500
    link/ether ba:0e:84:26:09:45 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::b80e:84ff:fe26:945/64 scope link
       valid_lft forever preferred_lft forever
root@template:~# ip address add 192.168.0.1/24 dev tap0
root@template:~# ip address show dev tap0
4: tap0:  mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 500
    link/ether ba:0e:84:26:09:45 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.1/24 scope global tap0
    inet6 fe80::b80e:84ff:fe26:945/64 scope link
        valid_lft forever preferred_lft forever
root@template:~#

Dodatkowo (korzystaj┐c z polecenia pokazanego powy┐ej):

  • dodaj adres 192.168.1.1 na interfejsie tap1 na maszynie template
  • Wy┐┐cz konfiguracj┐ interfejsu mechanizmem wbudowanym w debian
    	root@guest0:~# ifdown eth0
    	
    	root@guest1:~# ifdown eth0
    	
  • dodaj adres 192.168.0.101 na interfejsie eth0 na maszynie guest0
  • dodaj adres 192.168.1.102 na interfejsie eth0 na maszynie guest1
  • Podnie┐ interfejsy tap0 i tap1 na template oraz eth0 na geust0 i guest1:
    	root@template:~# ip link set dev tap0 up
    	root@template:~# ip link set dev tap1 up
    	
    	root@guest0:~# ip link set dev eth0 up
    	
    	root@guest1:~# ip link set dev eth0 up
    	
  • Na maszynie template tablica routingu powinna wygl┐da┐ tak (z wyj┐tkiem ostatniej linii):
    	root@template:~# ip r s
    	default via 192.168.47.2 dev eth0
    	192.168.0.0/24 dev tap0  proto kernel  scope link  src 192.168.0.1
    	192.168.1.0/24 dev tap1  proto kernel  scope link  src 192.168.1.1
    	192.168.47.0/24 dev eth0  proto kernel  scope link  src 192.168.47.133
    	root@template:~#
    	
  • Podnie┐ interfejsy tap0 i tap1:
    	root@template:~# ip link set dev tap0 up
    	root@template:~# ip link set dev tap1 up
    	
  • Dodaj tras┐ domy┐ln┐ w guest0 i guest1:
    	root@guest0:~# ip route add default via 192.168.0.1
    	
    	root@guest1:~# ip route add default via 192.168.1.1
    	
  • sprawd┐ czy z guest0 czy dzia┐a ping do 192.168.1.102
  • wykonaj polecenie opisane poni┐ej (w┐┐czenie przekazywania pakietˇw)
  • po tej modyfikacji sprawd┐ czy z guest0 czy dzia┐a ping do 192.168.1.102

W┐┐cz przekazywanie pakietˇw mi┐dzy interfejsami:

root@template:~# cat /proc/sys/net/ipv4/ip_forward
0
root@template:~# echo "1" > /proc/sys/net/ipv4/ip_forward
root@template:~# cat /proc/sys/net/ipv4/ip_forward
1
root@template:~#

Zadanie:

  • Uruchom na guest0 polecenie, ktˇre b┐dzie nas┐uchiwa┐o na porcie 12345: "nc -l -p 12345".
  • Uruchom na guest1 polecenie, ktˇre b┐dzie ┐┐czy┐o si┐ na port 12345 na adres 192.168.0.1: "nc 192.168.0.1 12345"
  • Sprawd┐ czy komunikacja dzia┐a
  • Kiedy uruchomisz polecenie nas┐uchuj┐ce w tle (dodaj & na ko┐cu), mo┐esz sprawdzi┐ poleceniem "netstat -tn", kto jest po┐┐czony do serwera - jaki numer IP jest widoczny.
  • Ustaw maskowanie adresˇw IP i sprawd┐ kto jaki numer IP jest widocznym podczas polaczenia do nasluchujacego nc.
    	root@template:~# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -d 192.168.0.0/24 -j SNAT --to-source 192.168.0.1
    	root@template:~#
    	
  • Sprawdz czy maszyna guest1 ma dostep do Internetu (dlaczego nie?). Wykonaj translacje adresu zrodlowego w celu maskowania adresu na interfejs maszyny template widoczny na zewnatrz (w tym przykladzie 192.168.47.33 - sprawdz jaki adres ma interfejs eth0 na Twoim template):
    	root@template:~# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 192.168.47.33 
    	root@template:~#
    	
  • Ustaw nc nasluchujace na porcie 12345 na guest0. Z guest1 polacz sie na adres ip guest0 na port 12346. Polaczenie nie udalo sie. Nastepnie wykonaj:
    	root@template:~# iptables -t nat -A PREROUTING -p tcp -d 192.168.0.101 --dport 12345 -j DNAT --to-destination 192.168.0.101:12345
    	root@template:~#
    	
    Co si┐ sta┐o?