W jaki sposób maskowanie iptables pozwala uzyskać dostęp do innej lokalnej podsieci?

0

Mój router Linksys (IP 192.168.1.1 wewnątrz / 24 podsieci) jest podłączony do mojego modemu ADSL (IP 10.0.0.138 wewnątrz / 24 podsieci), aby ustanowić połączenie internetowe przez PPPoE. Aby móc uzyskać dostęp do interfejsu internetowego modemu z jednego z komputerów podłączonych do routera, należy wykonać następujące polecenia na routerze:

ip addr add 10.0.0.1/24 dev vlan1 brd +
iptables -I POSTROUTING -t nat -o vlan1 -d 10.0.0.138 -j MASQUERADE

Z tego, co zrozumiałem, jest to konieczne, ponieważ router w przeciwnym razie założyłby, że IP 10.0.0.138 jest adresem zewnętrznym, ponieważ nie jest częścią własnej podsieci 192.168.1.0/24.

Ale co dokładnie robią te dwie linie? Pierwszy wydaje się przypisywać drugi adres IP do interfejsu vlan1 (który jest zasadniczo portem WAN routera). Drugi najwyraźniej modyfikuje adres źródłowy wychodzących pakietów IP. Ale czy to nie jest dokładnie to, co domyślny router domowy robi? Używając iptables -t nat -L Odkryłem, że istnieje już reguła:

target      prot opt source               destination
MASQUERADE  all  --  anywhere             anywhere

Teraz dodaje się drugie polecenia

MASQUERADE  all  --  anywhere             10.0.0.138

do tej tabeli, ale czy nie jest to tylko bardziej szczegółowa wersja powyższej reguły, a zatem zbędna?

Byłoby wspaniale, gdyby ktoś mógł mi wyjaśnić szczegóły tego, co się tutaj dokładnie dzieje!


Wyjście ip route:

87.186.225.71   dev ppp0   proto kernel  scope link  src [my public IP]
10.0.0.0/24     dev vlan1  proto kernel  scope link  src 10.0.0.1
192.168.1.0/24  dev br0    proto kernel  scope link  src 192.168.1.1
127.0.0.0/8     dev lo                   scope link
default via 87.186.225.71 dev ppp0

Wyjście ip addr:

1: lo:  mtu 16436 qdisc noqueue
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
2: eth0:  mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:13:10:2f:fe:48 brd ff:ff:ff:ff:ff:ff
3: eth1:  mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:13:10:2f:fe:4a brd ff:ff:ff:ff:ff:ff
4: vlan0:  mtu 1500 qdisc noqueue
    link/ether 00:13:10:2f:fe:48 brd ff:ff:ff:ff:ff:ff
5: vlan1:  mtu 1500 qdisc noqueue
    link/ether 00:13:10:2f:fe:49 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.1/24 brd 10.0.0.255 scope global vlan1
6: br0:  mtu 1500 qdisc noqueue
    link/ether 00:13:10:2f:fe:48 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.1/24 brd 192.168.1.255 scope global br0
...
23: ppp0:  mtu 1492 qdisc pfifo_fast qlen 3
    link/ppp
    inet [my public IP] peer 87.186.225.71/32 brd [my public IP] scope global ppp0
ph4nt0m
źródło
Potrzebne jest MOREINFO o twojej konfiguracji. proszę pokazać wyjście ip addr, routel i iptables-save.
BatchyX
Twój modem jest prawdopodobnie skonfigurowany tylko z 10/24 podsieć kierowana przez port LAN, więc jeśli spróbujesz uzyskać dostęp do routera z adresem źródłowym w 192.168.1.0/24, może spróbować skierować odpowiedź do swojego portu WAN lub odrzucić pakiet. Oprócz dostępu do Internetu, router prawdopodobnie ma już adres w 10/24 zasięg, więc to trochę dziwne. The MASQUERADE zasada wydaje się również niepotrzebna na pierwszy rzut oka, ale iptables -L wiadomo, że ukrywa niektóre opcje, które mogą mieć ogromne znaczenie.
BatchyX
Używam zmodyfikowanego oprogramowania Tomato, które nie zawiera żadnego routel ani iptables-saveprzepraszam. Nie sądzę, że mój router ma już IP w modemie 10.0.0.0/24 zasięg, aby uzyskać dostęp do Internetu, ponieważ PPPoE znajduje się poniżej warstwy IP i dlatego nie używa żadnych adresów IP. znalazłem to połączyć który próbuje wyjaśnić. Nadal nie wiadomo, który adres IP jest kopiowany do pakietów wychodzących przez MASQERADE reguła od vlan1 ma teraz wiele adresów IP ( 192.168.1.1 i 10.0.0.1 ).
ph4nt0m
widocznie, MASQUERADE wybiera adres, którego podsieć zawiera adres następnego przeskoku, lub coś w tym stylu (nie wiesz, dlaczego nie tylko wybiera preferowany adres źródłowy). Więc to znaczy 10.1 dla 10/24. Jeśli routel jest niedostępny, pokaż wyjście ip rule i ip route. Pokaż także wyjście iptables -t nat -S i iptables -S zamienić iptables-save
BatchyX
Niestety, ip rule nie działa i -S argument z iptables jest nieznany. Oprogramowanie układowe zawiera iptables v1.3.8, które zakładam, że jest dość stare. Może przynajmniej ip route i ip addr są pomocne, więc dodałem wyjścia do głównego postu.
ph4nt0m