Jak mogę ustawić mój Linux jako router do przesyłania pakietów IP?

25

Robię eksperyment sieciowy na temat przekazywania pakietów IP, ale nie wiem, dlaczego to działa.

Mam maszynę linux z dwoma interfejsami sieciowymi, eth0 i eth1, oba ze statycznym adresem IP (eth0: 192.168.100.1, eth1: 192.168.101.2).

Mój cel jest prosty, chcę tylko przesyłać pakiety ip z eth1 z miejscem docelowym w podsieci 192.168.100.0/24 do eth0 i przekazywać pakiety ip z eth0 z miejscem docelowym w podsieci 192.168.101.0/24 do eth1.

Włączyłem przekazywanie IP za pomocą:

sysctl -w net.ipv4.ip_forward=1

moja tabela routingu wygląda następująco:

# route -n
Kernel IP routing table
Destination     Gateway     Genmask        Flags Metric Ref   Use  Iface
192.168.100.0   0.0.0.0     255.255.255.0  U     0      0       0  eth0
192.168.101.0   0.0.0.0     255.255.255.0  U     0      0       0  eth1

Ale kiedy próbuję pingować z 192.168.100.25 do 192.168.101.47, to nie działa.

Yishu Fang
źródło

Odpowiedzi:

23

Musisz dodać regułę przekazywania za pomocą iptablespolecenia, coś takiego:

modprobe iptable_nat
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth1 -j ACCEPT

zobacz man iptableswięcej szczegółów lub wyszukaj w Internecie artykuły howto, na przykład Jak skonfigurować router NAT na komputerze z systemem Linux

Oto Linux IP Masquerade HOWTO, który szczegółowo omawia ten temat.

Powinieneś także upewnić się, że nie masz żadnych innych reguł (np. W FORWARDłańcuchu), które zastępują powyższą ACCEPTregułę. Jeśli tak, prawdopodobnie chcesz je usunąć.

Siergiej
źródło
Nie wiem dlaczego, ale wciąż nie działa. Dodałem oba iptables -A FORWARD -i eth0 -o eth1 -j ACCEPTi iptables -A FORWARD -i eth1 -o eth0 -j ACCEPTdo moich stołów. I wszystkie moje zasady WEJŚCIA, WYJŚCIA i DO PRZODU ACCEPT.
Yishu Fang,
Istnieje wiele rzeczy, które można źle skonfigurować. Na przykład adres IP hosta powinien zostać określony jako „adres IP bramy” na hostach w sieci „wewnętrznej”, aby wiedzieli, że jeśli adres IP nie znajduje się w zasięgu ich „sieci lokalnej”, pakiety muszą zostać wysłane do twojego maszyna bramowa. Jest to podobne do zwykłej konfiguracji, w której router ADSL jest zarejestrowany jako brama dla hostów w sieci LAN
Sergey
Kiedy używam traceroutena moim hoście, pokazuje, że pakiet trafia do „routera” (192.168.100.1), ale nie idzie dalej.
Yishu Fang,
1
@UniMouS: Wygląda na to, że zapomniałem o MASQUERADE - zredagowałem swoją odpowiedź i dodałem nowe linki do artykułów.
Siergiej
2

Musisz dodać trasę zarówno do 192.168.100.25, jak i 192.168.101.47.

Jeśli twój serwer przekazujący ma adresy IP 192.168.100.1 i 192.168.101.1, dodajesz klienta 192.168.100.25

ip route 192.168.101.0/24 via 192.1268.100.1

oraz w kliencie 192.168.101.47

ip route 192.168.100.0/24 via 192.168.101.1

(Działa to tylko z włączonym przekazywaniem, bez iptables).

V. Campos
źródło