Przekazywanie IP z jednego serwera domyślną trasą


0

Mam urządzenie (IP 10.110.1.3) z następującą konfiguracją reguły:

$ ip route
default via 10.110.1.4 dev wlan0 onlink

Mam włączone przekazywanie IPv4 na obu komputerach. Obie maszyny mogą ze sobą rozmawiać.

Oto moje iptables. Chcę trasować z interfejsu wlp0s20u1 do wlp3s0:

$ iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

$ iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A POSTROUTING -o wlp3s0 -j MASQUERADE

Trasy w urządzeniu „trasującym” 10.110.1.4:

$ ip route
default via 192.168.1.1 dev wlp3s0  proto static 
10.110.1.0/24 dev wlp0s20u1  proto kernel  scope link  src 10.110.1.4 
192.168.1.0/24 dev wlp3s0  proto kernel  scope link  src 192.168.1.110  metric 600 

Używając trasy „if interface”, jasne jest, że to nigdy nie zadziała:

$ ip route get to 192.168.1.1 from 10.110.1.3 iif wlp0s20u1
RTNETLINK answers: No route to host

$ ip route get to 8.8.8.8 from 10.110.1.3 iif wlp0s20u1
RTNETLINK answers: No route to host

Zauważyłem, że src 192.168.1.110na 192.168.1.0trasie, i próbowała dodając następującą trasą aby rozwiązać ten problem:

$ sudo ip route add 192.168.1.1/32 dev wlp3s0

Ale to też nie pomogło.

Użyłem tcpdump do analizy icmp, dzięki czemu mogę zobaczyć, dokąd zmierzają moje pingi.

$ tcpdump -i wlp0s20u1 -n icmp
listening on wlp0s20u1, link-type EN10MB (Ethernet), capture size 262144 bytes
18:13:19.355166 IP 10.110.1.3 > 8.8.8.8: ICMP echo request, id 32366, seq 1, length 64
18:13:20.359770 IP 10.110.1.3 > 8.8.8.8: ICMP echo request, id 32366, seq 2, length 64

i

tcpdump -i wlp3s0 -n icmp                                             
listening on wlp3s0, link-type EN10MB (Ethernet), capture size 262144 bytes

Nic w interfejsie wlp3s0, chyba że wykonam ping z komputera „routera”.

Tak więc oczywistym problemem jest to, że jądro nie wie, jak trasować pakiety z wlp0s20u1 do wlp3s0. Ale nie jestem pewien, jak to zrobić. Próbowałem jawnie dodać trasy, aby to zrobić, ale wydaje się, że to nie działa.

Jeśli spamuję następujące elementy, tylko liczniki pakietów przekierowujących zwiększają się (podczas próby pingowania);

$ iptables -t nat -v -L -n

Chain PREROUTING (policy ACCEPT 775 packets, 50740 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 24 packets, 1920 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 95 packets, 23073 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 5 packets, 1000 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   90 22073 MASQUERADE  all  --  *      wlp3s0  0.0.0.0/0            0.0.0.0/0 

Każda pomoc jest mile widziana!

EDYCJA: Uproszczone objaśnienie

Mam trzy urządzenia:

  • Odp .: Router WiFi pod adresem 192.168.1.1
  • B: Komputer z dwiema kartami Wi-Fi: wlp3s0 w sieci 192.168.1.1 i wlp0s20u1 w sieci 10.110.1.0/24.
  • C: Komputer wyłącznie w sieci WiFi 10.110.1.0/24.

Próbuję pozwolić C rozmawiać z Internetem (0.0.0.0/0) za pomocą dwóch przeskoków, najpierw do B, potem do A, a potem do Internetu.

Problem polega na tym, że B kieruje pakiety z wlp3s20u1 do wlp3s0.


Jeśli nie uzyskasz rozwiązania tego problemu, sugeruję wyjaśnienie topologii sieci jako całości, kart sieciowych na każdym komputerze oraz adresów IP powiązanych z każdą kartą sieciową i wyraźne ustawienia są na którym komputerze. Inne odniesienia do twojej konfiguracji są albo niejednoznaczne, albo niepotwierdzone - mówisz, że oba komputery PC mogą ze sobą rozmawiać, ale tak naprawdę nie mówisz, co chcesz robić - Zgaduję, że mam dostęp do Internetu i dalej zgaduję, że brama WAN to 192.168.1.1 (lub w tej podsieci), ale nie jest jasne, czy jest to inna nieopisana karta sieciowa czy współdzielone media.
Argonauts,

@Argonauts Napisałem uproszczone wyjaśnienie ze wszystkimi wymienionymi kartami sieciowymi. Bramka WAN to 192.168.1.1, tak. Dzięki za pomoc!
Christian Stewart,

Odpowiedzi:


0

Rozwiązaniem było włączenie przekazywania określonego interfejsu. Z jakiegoś powodu nie został włączony.

sudo sysctl net.ipv4.conf.wlp3s0.forwarding=1
sudo sysctl net.ipv4.conf.wlp0s20u1.forwarding=1
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.