Mam maszynę z kilkoma interfejsami, które mogę skonfigurować tak, jak chcę, na przykład:
- eth1: 192.168.1.1
- eth2: 192.168.2.2
Chciałbym przekazać cały ruch wysłany na jeden z tych lokalnych adresów przez drugi interfejs. Na przykład wszystkie żądania do serwera iperf, ftp, http o numerze 192.168.1.1 powinny być nie tylko kierowane wewnętrznie, ale przekazywane dalej przez eth2 (a sieć zewnętrzna zajmie się przekierowaniem pakietu do eth1).
Próbowałem i spojrzałem na kilka poleceń, takich jak iptables, ip route itp. ... ale nic nie działało.
Najbliższe zachowanie, jakie mogłem osiągnąć, to:
ip route change to 192.168.1.1/24 dev eth2
które wysyłają wszystkie 192.168.1.x na eth2, z wyjątkiem 192.168.1.1, które nadal są wewnętrznie trasowane. Czy mógłbym wtedy przesyłać NAT całego ruchu skierowanego do fałszywego 192.168.1.2 na eth1, przekierowanego wewnętrznie na 192.168.1.1? Właściwie walczę z iptables, ale jest to dla mnie zbyt trudne.
Celem tej konfiguracji jest przeprowadzenie testów sterowników interfejsu bez użycia dwóch komputerów.
Używam Linuksa, ale jeśli wiesz, jak to zrobić w systemie Windows, kupię to!
Edytować:
Sieć zewnętrzna to tylko kabel krosowy między eth1 i eth2. Powiedzmy, że mam serwer http na moim komputerze. Teraz chcę uzyskać dostęp do tego serwera z tego samego komputera, ale chcę zmusić ruch TCP / IP do przechodzenia przez ten kabel eth1 / eth2. Jak mam w tym celu skonfigurować moje interfejsy?
źródło
Odpowiedzi:
Rozszerzyłem odpowiedź Caladony, ponieważ nie widziałem pakietów odpowiedzi. W tym przykładzie:
Lokalne trasy iptable komputera są ustawione na ruch wychodzący SNAT i DNAT do „fałszywego” adresu IP.
Reguły wykonują następujące czynności:
Podsumowując, system lokalny może teraz komunikować się z „wirtualną” maszyną o adresach 192.168.1.100 i 192.168.2.100.
Następnie musisz zmusić lokalny komputer do korzystania z zewnętrznego routera w celu uzyskania fałszywego adresu IP. Robisz to, tworząc bezpośrednią trasę do adresów IP poprzez router. Chcesz się upewnić, że pakiety są wymuszane na przeciwną do podsieci docelowej.
Wreszcie, aby wszystko działało, zewnętrzny router musi wiedzieć, jak dotrzeć do fałszywych adresów IP na lokalnym komputerze. Możesz zrobić cienkie, włączając ARP proxy dla twojego systemu.
Dzięki tej konfiguracji możesz teraz traktować fałszywe adresy IP jako prawdziwy system na komputerze lokalnym. Wysyłanie danych do podsieci .1 wymusi pakiety z interfejsu .2. Wysyłanie danych do podsieci .2 wymusi pakiety z interfejsu .1.
źródło
Z powodzeniem wykorzystałem następujące informacje w systemie Linux do przetestowania przepustowości na nowej podwójnej karcie 10 Gb / s w trybie „pętli zwrotnej”, to znaczy, że jeden port jest podłączony bezpośrednio do drugiego. To wszystko jest tylko trochę voodoo tylko po to, aby zmusić pakiety do wyjścia, ale jeśli tego nie zrobisz, Linux po prostu zewrze ruch w jądrze (stąd pytanie OP). W powyższej odpowiedzi Casey nie jestem pewien, czy naprawdę konieczne było posiadanie zewnętrznego routera, czy nie, ale poniższe są całkowicie samodzielne. Dwa interfejsy to eth2 i eth3.
Podaj adresy IP interfejsom i umieść je w osobnych sieciach:
Następnie skonfigurujemy podwójny scenariusz NAT: dwie nowe fałszywe sieci wykorzystane do osiągnięcia drugiej. Po wyjściu z sieci NAT poznaj swoją fałszywą sieć. Po drodze napraw miejsce docelowe. I odwrotnie dla drugiej sieci:
Teraz powiedz systemowi, jak dostać się do każdej fałszywej sieci, i wstępnie wypełnij wpisy arp (pamiętaj o zastąpieniu adresów MAC, nie używaj moich):
To oszukuje Linuksa na tyle, aby faktycznie umieścić pakiety na kablu. Na przykład:
wychodzi eth2, źródłowy adres IP 10.50.0.1 otrzymuje NATted do 10.60.0.1, a jeśli chodzi o eth3, miejsce docelowe 10.60.1.1 dostaje NATted do 10.50.1.1. Odpowiedź ma podobną podróż.
Teraz użyj iperf do przetestowania przepustowości. Powiąż właściwe adresy IP i upewnij się, z którym adresem IP się kontaktujesz (fałszywy adres drugiego końca):
Upewnij się, że ruch naprawdę dociera do drutu:
Możesz także oglądać / proc / przerywa, aby mieć absolutną pewność, że karta jest używana:
W każdym razie znalazłem ten post, szukając sposobu, jak to zrobić, dziękuję za pytania i mam nadzieję, że pomoże to każdemu znaleźć ten post w przyszłości.
źródło
Jak zawsze - jestem trochę spóźniony - ale w dzisiejszych czasach można użyć sieciowych przestrzeni nazw, aby odizolować interfejsy i zapobiec lokalnemu przesyłaniu dalej (i majstrować przy iptables :)).
Utwórz przestrzenie nazw (wszystko odbywa się z wymaganymi uprawnieniami, np. Jako root):
Zauważ, że dostęp do statusu / konfiguracji interfejsów musi być teraz możliwy w kontekście przypisanej przestrzeni nazw - więc nie pojawią się one, jeśli uruchomisz odsłonięty link ip, ponieważ jest on uruchamiany w kontekście domyślnej przestrzeni nazw. Uruchomienie polecenia w przestrzeni nazw można wykonać za pomocą
jako przedrostek.
Teraz przypisz przestrzenie nazw do interfejsów, zastosuj config i ustaw interfejsy w górę:
Teraz możesz uruchamiać aplikacje w przestrzeni nazw - dla uruchomienia serwera iperf
a klient:
Ruch będzie teraz wysyłany przez interfejsy fizyczne, ponieważ cały stos sieci, interfejs, routing ... jest izolowany przez przestrzenie nazw, więc jądro nie jest w stanie dopasować adresów używanych w ruchu do lokalnych (dostępnych) interfejsów.
Jeśli zakończysz eksperymenty, po prostu usuń przestrzenie nazw:
Interfejsy zostaną ponownie przypisane do domyślnej przestrzeni nazw, a cała konfiguracja wykonana w przestrzeni nazw zniknie (np. Nie trzeba usuwać przypisanych adresów IP).
źródło
Ok, w końcu udało mi się skonfigurować moją konfigurację.
Chodzi o to, aby użyć innego fałszywego adresu, aby wymusić trasę tego fałszywego adresu do interfejsu 2, a następnie przetłumaczyć fałszywy adres na prawdziwy adres 2 za pomocą NAT / iptables.
Moja konfiguracja składa się z jednego routera, który mogę telnet między IF1 (interfejs 1) a IF2
W mojej konfiguracji FAKE_ADDR i IF1_ADDR są w tej samej podsieci.
I na routerze:
Jeśli wyślę coś do FAKE_ADDR, pkt zostanie przesłane przez IF1 do routera, ponownie przesłane do IF2, wtedy FAKE_IP zostanie zastąpione przez IF2_ADDR. Pakiet jest przetwarzany przez serwer, wynik jest wysyłany z powrotem do IF1_ADDR, z IF2_ADDR, który jest zastępowany przez FAKE_ADDR.
Możliwe, że można zastosować prostszą konfigurację za pomocą tylko jednego kabla krosowego, ale ponieważ nie próbowałem, wolę podać moje działające rozwiązanie.
źródło
Odpowiedź udzielona powyżej przez Thomasa Tannhäusera była natychmiastowa!
Miałem podobną sytuację: pojedynczą maszynę z dwoma interfejsami enet. Mój plan polegał na użyciu jednego interfejsu jako serwera (odbiorcy), a drugiego jako klienta (nadawcy). Każdy interfejs byłby podłączony do routera, a iperf prowadziłby ruch przez router w celu pomiaru przepustowości, PPS, opóźnienia itp.
Niestety podejście iptables było nieintuicyjne i pełne problemów. Po kilku frustrujących godzinach porzuciłem ten plan ataku. Zainspirowany sugestią Thomasa odrobiłem pracę domową w przestrzeni nazw Linux IP i zacząłem doceniać prostotę i elegancję tego rozwiązania.
Poniżej znajduje się lista dokładnych poleceń, których użyłem do skonfigurowania mojej Fedory FC26, aby działała w tej roli. Dwa interfejsy to enp1s0 i enp3s0. Router ma dwa interfejsy o adresach 192.168.2.112 i 172.16.16.2. Każde złącze ENET FC26 jest podłączone bezpośrednio do odpowiedniego interfejsu routera.
źródło
Wygląda na to, że chcesz zmienić swój system Linux w pole typu router / most / brama / zapora ogniowa. Następujące zasoby mogą być tym, czego szukasz:
Projekt routera Linux
Lista dystrybucji routera lub zapory
Linux LiveCD Router
Linux Journal - Router Linux
Aktualizacja na podstawie dalszych informacji:
Nie sądzę, żebyś mógł robić, co chcesz. System operacyjny zawsze patrzy na swoją wewnętrzną tabelę routingu i „widzi” oba adresy IP lokalnie. Następnie kieruje ruch w systemie operacyjnym i nigdy nie umieszcza go na kablu. Będziesz potrzebował drugiej maszyny lub dwóch maszyn wirtualnych (sprawdź Xen ).
źródło
Wiele rzeczy do przejścia tutaj, więc nie mogę całkowicie zagwarantować mojej dokładności, ale pierwotne pytanie wydaje się szukać techniki znanej jako „wyślij do siebie” . Połączone wyszukiwanie pokazuje, co uważam za najlepiej utrzymaną łatkę jądra, jako górny link + dyskusje i łatki z innymi podejściami na różnych listach mailowych, szczególnie. LKML.
Myślę, że należy również spojrzeć na sieciowe przestrzenie nazw , wykonane za pomocą „ip netns” iproute2 . Wymaga to również dodatkowego interfejsu i magii routingu, więc może nie być nawet mniej skomplikowane niż masywna hoopla z iptables w innych odpowiedziach.
Komentarze na pewno są mile widziane, jeśli ktoś znajdzie coś przydatnego - jak, co, gdzie w Twojej implementacji.
źródło
Sprawdź ten artykuł. W tym miejscu wymieniono szczegółowe kroki umożliwiające dostęp do Internetu do virtualbox vm przy użyciu przekazywania NAT.
http://jackal777.wordpress.com/2012/02/13/virtualbox-host-only-networking-nat-for-internet-access/
źródło
oto jak to działa dla IPV6
przypisany statyczny Ips
skonfiguruj tylko trasy hosta do adresów „FAKE”
wypełnił tabelę Sąsiad ... jak arp
dodano wpisy ip6tables
źródło