powiązać oprogramowanie z różnymi interfejsami sieciowymi

37

Mam dwa różne interfejsy sieciowe, podłączone do 2 sieci. Jeden to eth0, a drugi to wlan0. Jak mogę powiedzieć oprogramowaniu, aby używało tylko określonego interfejsu?

Zasadniczo chcę, aby Firefox używał eth0, ponieważ jest to uniwersytecka sieć LAN i muszę przejść do stron intranetowych, druga to sieć Wi-Fi otwarta na Internet i chcę powiązać ją z Chrome.

Pracuję i muszę korzystać z intranetu. Więc eth0 jest moim wyborem, ale eth0 to intranet bez dostępu do Internetu (oczywiście). Ponieważ chcę mieć dostęp do Internetu, jestem podłączony do wlan0 (uniwersyteckie Wi-Fi dla studentów).

Problem polega na tym, że gdy czasami mam połączenie, przeglądarka szuka strony www.stackoverflow.com przy użyciu eth0. Chciałem więc przypisać przeglądarkę do korzystania tylko z określonego interfejsu.

dierre
źródło
Czy rutowanie nie jest lepszym rozwiązaniem dla Twoich problemów ?. Mam na myśli, że połączenia z ubuntu.stackexchange.com powinny korzystać z tego samego interfejsu z dowolnego programu.
Javier Rivera

Odpowiedzi:

23

Nie możesz powiązać oprogramowania klienckiego z określonymi interfejsami sieciowymi, ale możesz powiedzieć jądrze, że chcesz używać tylko jednego interfejsu sieciowego dla niektórych adresów IP, a drugiego dla wszystkich innych. Nazywa się to „routingiem” i można je skonfigurować za pomocą poleceń /sbin/routei /sbin/ip.

Jeśli poprawnie odczytam twoje pytanie, chcesz połączyć się z intranetowymi adresami IP za pomocą interfejsu eth0oraz z Internetem za pomocą interfejsu wlan0.

Jeśli uruchomisz polecenie ip route list, powinieneś zobaczyć wynik podobny do następującego (liczby będą różne, a także możesz mieć w nim więcej wierszy):

$ ip route list
10.60.44.0/25 dev eth0  proto kernel  scope link  src 10.60.44.39  metric 1 
192.168.80.0/21 dev wlan0  proto kernel  scope link  src 192.168.84.122  metric 2 
[...]
default via 10.60.44.1 dev eth0  proto static 

Pierwsze dwie linie powiedzieć o sieciach podłączonych do interfejsów eth0oraz wlan0: ruch w sieci skierowanych do komputerów na tych sieci będą wysyłane bezpośrednio do nich za pośrednictwem odpowiedniego interfejsu.

Ostatnia linia mówi ci, jaka jest „domyślna trasa”: jeśli twój komputer chce rozmawiać z komputerem w sieci, do której nie jest podłączony (np. Serwer stackoverflow.com), przekieruje ruch przez eth0, realizując przez host 10.60.44.1( nazywany „bramą domyślną”).

Aby więc przekierować ruch internetowy wlan0, należy upewnić się, że ostatni wiersz w danych ip route listwyjściowych brzmi:

default via A.B.C.D dev wlan0 proto static

gdzie A.B.C.Djest adres IP bramy w bezprzewodowej sieci LAN. Jeśli dane wyjściowe nie zawierają „dev wlan0”, możesz to zmienić za pomocą polecenia:

sudo ip route change to default dev wlan0 via A.B.C.D

Możesz znaleźć poprawne A.B.C.Ddla wlan0na dwa sposoby:

  1. Zajrzyj do katalogu /var/lib/dhcp3/: powinieneś znaleźć jakieś dhclient-...-wlan0.leasepliki. Otwórz najnowszą i wyszukaj wiersz z ciągiem znaków option router: reszta wiersza podaje adres IP A.B.C.D.

  2. Zapytaj lokalnych administratorów sieci. (Prawdopodobnie i tak najlepiej.)

Dzięki tej konfiguracji powinieneś być w stanie:

  • przeglądać Internet wlan0
  • przeglądaj swój intranet eth0, pod warunkiem, że znajduje się on w jednej sieci .

Jeśli twój intranet obejmuje wiele sieci, musisz dla nich dodać trasy - i jest to zdecydowanie coś, co wymaga interakcji z administratorami sieci lokalnej. :-)

Riccardo Murri
źródło
Z ciekawości: co zrobić, jeśli chcę powiązać dns (w tym subdomeny) zamiast adresów IP?
dierre
1
@dierre W skrócie: nie możesz, routing jest oparty na adresach IP. Długa historia zaczyna się od powiedzenia, że ​​routing jest rzeczą warstwy 3, więc nie będzie nawet wiedział o nazwach DNS, których rozwiązanie dzieje się dalej na stosie protokołów sieciowych ...
Riccardo Murri
tak tak, nie miałem na myśli routingu. Mam na myśli ogólnie. Czy da się to zrobić? Wiązanie DNS z interfejsami sieciowymi?
dierre
@dierre Co dokładnie chcesz zrobić? Czy odpowiedź serwera DNS dotyczy tylko określonego interfejsu sieciowego? A może klient DNS (tj. Rozpoznawanie DNS) korzysta tylko z wybranego interfejsu?
Riccardo Murri,
1
@Riccardo Murri: ubuntu.stackexchange.com/questions/4988/... et voilà
dzień
2

„ip netns” tworzy sieciowe przestrzenie nazw. Następnie możesz utworzyć wirtualne interfejsy (ip link add ... veth) i powiązać je z przestrzeniami nazw.

Przestrzenie nazw można skonfigurować na przykład na różne trasy (w ten sposób używając różnych interfejsów)

Następnie możesz uruchamiać polecenia w tej przestrzeni nazw, która będzie korzystać z utworzonej przestrzeni nazw .. „ip netns exec NAME cmd ...”

Źródło: http://manpages.ubuntu.com/manpages/saucy/en/man8/ip-netns.8.html

olivervbk
źródło