Mam dwa urządzenia sieciowe na pokładzie mojego Macbooka Pro:
- WIFI (en1): Używany do ogólnego ruchu. Łączy się z adresem IP 192.168.19. * Przez DHCP
- LAN (en0): Używany do określonego ruchu. Łączy się z adresem IP 192.168.2.10 jako statyczny adres IP. Nie łączy się z routerem, tylko przełącznik do bezpośredniego połączenia
routingu.
Mam 4 adresy IP, do których muszę uzyskać dostęp w sieci LAN:
- 192.168.2.1
- 192.168.2.21
- 192.168.2.20
- 192.168.2.30
Reszta ruchu musi iść do WIFI. Próbowałem skonfigurować tabelę routingu dla określonych adresów IP, ale udało mi się tylko zepsuć moją sieć. Nie wchodzę zbyt często w świat sieci, ale to było ostatnie polecenie, które próbowałem:
sudo route add -host 192.168.2.30 -interface en0
To polecenie zabiło moją zdolność używania ping. Powiedział mi, że ping nie może przydzielić pamięci (czy to w ogóle możliwe)? To także zabiło mój dostęp do Wi-Fi. Wylogowanie i ponowne zalogowanie rozwiązało problem. Naprawdę nie mam nic przeciwko temu, aby to rozwiązanie było trwałe, więc nie mam nic przeciwko tymczasowemu routingowi.
EDYTOWAĆ:
Jeśli obecnie próbuję:
sudo route flush
sudo route add default 192.168.19.1
Dzięki temu wszystko działa przez około minutę. Ale po takiej minucie „zapomina” o routingu do WiFi, zachowując routing LAN (en0). Jeśli odłączę i ponownie podłączę kabel LAN (en0), proces będzie działał przez kolejną minutę.
EDYCJA 2:
Oto niektóre z poleceń wprowadzonych jako żądanie przez d34dh0r53.
$ netstat -rn
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
default 192.168.2.1 UGSc 4 0 en0
default 192.168.19.1 UGScI 0 0 en1
127 127.0.0.1 UCS 0 1 lo0
127.0.0.1 127.0.0.1 UH 5 1429023 lo0
169.254 link#4 UCS 0 0 en0
192.168.2 link#4 UCS 4 0 en0
192.168.2.1 0:27:22:2e:5f:1a UHLWIi 2 0 en0 1199
192.168.2.10 127.0.0.1 UHS 0 0 lo0
192.168.2.30 90:a2:da:0:f5:63 UHLWIi 1 1433 en0 1191
192.168.2.255 ff:ff:ff:ff:ff:ff UHLWbI 0 7 en0
192.168.19 link#5 UCS 2 0 en1
192.168.19.1 3e:d0:f8:aa:28:56 UHLWIi 0 2 en1 1192
192.168.19.3 127.0.0.1 UHS 1 0 lo0
192.168.19.255 ff:ff:ff:ff:ff:ff UHLWbI 0 5 en1
Internet6:
Destination Gateway Flags Netif Expire
::1 link#1 UHL lo0
fe80::%lo0/64 fe80::1%lo0 UcI lo0
fe80::1%lo0 link#1 UHLI lo0
fe80::%en0/64 link#4 UCI en0
fe80::226:4aff:fe00:b68a%en0 0:26:4a:0:b6:8a UHLI lo0
fe80::%en1/64 link#5 UCI en1
fe80::226:bbff:fe03:cbd%en1 0:26:bb:3:c:bd UHLI lo0
ff01::%lo0/32 fe80::1%lo0 UmCI lo0
ff01::%en0/32 link#4 UmCI en0
ff01::%en1/32 link#5 UmCI en1
ff02::%lo0/32 fe80::1%lo0 UmCI lo0
ff02::%en0/32 link#4 UmCI en0
ff02::%en1/32 link#5 UmCI en1
$ traceroute -n 192.168.2.1
traceroute to 192.168.2.1 (192.168.2.1), 64 hops max, 52 byte packets
1 192.168.2.1 2.499 ms 3.392 ms 3.829 ms
$ traceroute -n google.com
traceroute: unknown host google.com
źródło
Odpowiedzi:
Nie powinieneś ręcznie tworzyć żadnych reguł routingu dla tej konfiguracji, pod warunkiem, że wszystkie adresy 192.168.2.x, z którymi chcesz się komunikować, znajdują się poza interfejsem z adresem 192.168.2.x.
Po wykonaniu tej czynności
netstat -rn
powinien nadal pokazywać trasy dla obu podsieci, ale tylko trasę „link # 4” zamiast trasy domyślnej przez 192.168.2.1.Jeśli nie chcesz domyślnej trasy, pozostaw pole routera puste. Wartość w polu routera służy tylko do ustawienia domyślnej trasy przez ten interfejs sieciowy i nie jest używana do niczego innego.
źródło
192.168.2.1
w polu routera, aby pasował do „routera” po stronie sieci LAN. Myślałem, że jest to wymagane, ale teraz widzę, że przejęło domyślną trasę dla ogólnego ruchu.Problem polega na tym, że Twój
en0
interfejs dodaje domyślną trasę, która ma pierwszeństwo przed domyślną trasą ustaloną przez interfejs 802.11. Nie jestem do końca pewien, dlaczego, ale to albo fakt, że BSD woli interfejs przewodowy niż bezprzewodowy, albo interfejs statycznie skonfigurowany niż dynamicznie skonfigurowany. Możesz powiedzieć, że kolumnaen0
używa domyślnej trasyRefs
;Refs
to wskaźnik wskazujący bieżącą liczbę aktywnych zastosowań trasy, dzięki czemu możemy zobaczyć, że generuje cały ruch.Rozwiązaniem jest usunięcie tej trasy, najlepiej na stałe z tabeli routingu, aby ruch przeznaczony dla hostów innych niż te w sieci lokalnej przechodzi przez domyślną bramę ustanowioną przez DHCP
en1
. Pierwszą rzeczą, którą sprawdzę, jest panel konfiguracji,en0
aby upewnić się, że nic nie wpisałeś wrouter
polu. Informacje w tym polu są dodawane jako brama domyślna. Jeśli to nie zadziała, musimy ręcznie usunąć trasę,route flush
ponieważ nie działam, ponieważ wierzę, że nakazuje OS X ponowne załadowanie informacji o routingu z plików konfiguracyjnych interfejsu, a zatem przywrócenie zmiany po krótkim czasie. Następujące polecenie powinno usunąć domyślną trasę dlaen0
interfejs do momentu ponownego uruchomienia sieci lub IPLed systemu:Jeśli chcesz, aby ta zmiana była trwała, możesz albo: a) utworzyć usługę, w
/Library/StartupItems
której wydaje mi się, że to za dużo pracy, lub b) dodać tę linię/etc/rc.local
za pomocą polecenia, takiego jak:Konieczne może być dodanie
sleep <number_of_seconds>
polecenia przed tym wierszem,/etc/rc.local
aby uniknąć uruchomienia polecenia przed pełnym uruchomieniem interfejsów i ustaleniem tabeli routingu.Mam nadzieję, że to pomoże i powodzenia!
źródło
192.168.2.1
Problemem była domyślna trasa , ale @rakslice stwierdził, że popełniłem błąd podczas wprowadzania informacji o routingu dla połączenia en0. Umieściłem adres IP192.168.2.1
w polu routera, uważając, że był wymagany. Po usunięciu domyślnego adresu IP routera usunąłem również złą domyślną trasę do192.168.2.1
. Ponownie, dzięki za pomoc.Chcesz ustawić IP Wi-Fi jako bramę domyślną i usunąć dowolną bramę domyślną (lub trasę do 0.0.0.0) podłączoną do sieci LAN lub 192.168.2.0/24.
Jest to oczywiście łatwiejsze, jeśli możesz ustawić swój en1 na stały adres IP, który będzie działał z Wi-Fi.
Może być konieczne dodanie 192.168.2.10 jako trasy do sieci 192.168.2.0/24. Powinno to jednak być automatyczne, ponieważ pozwala stwierdzić, że 192.168.2.0/24 jest bezpośrednio połączone wirtualnie z tym, co przypisałeś do interfejsu.
Tak więc ruch do dowolnego 192.168.2.X wyjdzie z 192.168.2.10, a ruch do dowolnego innego miejsca będzie wychodził z adresu IP en1.
źródło
remove any default gateway connected to the LAN
.sudo route del default 192.168.2.10
? nie jestem pewien, jak to zrobić na FreeBSD / Mac OSX, ale powinno być podobnie.sudo route delete default 192.168.2.10
. Ping jest nadal aktywny. Jednak zamknął dostęp do ruchu Wi-Fi z wyłączeniem routera ip.