Jak mogę utrzymać dostęp do lokalnej sieci LAN podczas połączenia z Cisco VPN?
Podczas łączenia za pomocą Cisco VPN serwer musi pouczyć klienta, aby uniemożliwił dostęp do lokalnej sieci LAN.
Zakładając, że tej opcji po stronie serwera nie można wyłączyć, w jaki sposób można zezwolić na dostęp do lokalnej sieci LAN podczas połączenia z klientem Cisco VPN?
Kiedyś myślałem, że to po prostu kwestia dodania tras, które przechwytują ruch w sieci LAN z wyższymi parametrami, na przykład:
Network
Destination Netmask Gateway Interface Metric
10.0.0.0 255.255.0.0 10.0.0.3 10.0.0.3 20 <--Local LAN
10.0.0.0 255.255.0.0 192.168.199.1 192.168.199.12 1 <--VPN Link
A próba usunięcia 10.0.x.x -> 192.168.199.12
trasy nie przyniesie żadnego efektu:
>route delete 10.0.0.0
>route delete 10.0.0.0 mask 255.255.0.0
>route delete 10.0.0.0 mask 255.255.0.0 192.168.199.1
>route delete 10.0.0.0 mask 255.255.0.0 192.168.199.1 if 192.168.199.12
>route delete 10.0.0.0 mask 255.255.0.0 192.168.199.1 if 0x3
I chociaż nadal może to być po prostu problem z routingiem, próby dodawania lub usuwania tras kończą się niepowodzeniem.
Na jakim poziomie sterownik klienta Cisco VPN robi to, co na stosie sieciowym zastępuje zdolność lokalnego administratora do administrowania swoim komputerem?
Klient Cisco VPN nie może wykorzystywać magii. To wciąż oprogramowanie działa na moim komputerze. Jakiego mechanizmu używa do zakłócania sieci mojej maszyny? Co się stanie, gdy pakiet IP / ICMP dotrze do sieci? Gdzie w stosie sieciowym zjada się pakiet?
Zobacz też
- Brak połączenia internetowego z Cisco VPN
- Klient Cisco VPN przerywa łączność z moim serwerem LDAP
- Cisco VPN zatrzymuje przeglądanie systemu Windows 7
- Jak mogę zabronić tworzenia trasy w systemie Windows XP po połączeniu z Cisco VPN?
- Przekierowywanie lokalnego ruchu LAN i ruchu internetowego w sieci VPN
- Klient VPN „Zezwól na dostęp do lokalnej sieci LAN”
- Zezwól na dostęp do lokalnej sieci LAN dla klientów VPN na przykładzie konfiguracji koncentratora VPN 3000
- Brak dostępu do sieci LAN po podłączeniu do sieci VPN
- Dokumentacja Windows XP: Trasa
Edycja: Rzeczy, których jeszcze nie próbowałem:
>route delete 10.0.*
Aktualizacja: odkąd Cisco zrezygnowało ze swojego starego klienta na rzecz AnyConnect (VPN opartej na HTTP SSL), to nierozwiązane pytanie można pozostawić jako relikt historii.
W przyszłości możemy spróbować rozwiązać ten sam problem z nowym klientem .
źródło
Odpowiedzi:
Problem z Anyconnect polega na tym, że najpierw modyfikuje tabelę routingu, a następnie opiekuje się nią i naprawia, jeśli zmodyfikujesz ją ręcznie. Znalazłem obejście tego. Działa z wersją 3.1.00495, 3.1.05152, 3.1.05170 i prawdopodobnie wszystkim innym w rodzinie 3.1. Może współpracować z innymi wersjami, przynajmniej podobny pomysł powinien działać, zakładając, że kod nie zostanie przepisany. Na szczęście dla nas Cisco umieściło połączenie „opiekunka do dziecka” do wspólnej biblioteki. Chodzi o to, że zapobiegamy działaniu vpnagentd przez LD_PRELOAD.
Najpierw tworzymy plik
hack.c
:Następnie skompiluj to w ten sposób:
Zainstaluj
libhack.so
w ścieżce biblioteki Cisco:Sprowadź agenta:
Upewnij się, że to naprawdę nie działa
Jeśli nie,
kill -9
to dla pewności.Następnie napraw /etc/init.d/vpnagentd, dodając,
LD_PRELOAD=/opt/cisco/anyconnect/lib/libhack.so
gdzie wywoływana jest funkcja vpnagentd, aby wyglądała następująco:Teraz uruchom agenta:
Napraw iptables, ponieważ AnyConnect zadziera z nimi:
Możesz tutaj zrobić coś bardziej zaawansowanego, aby umożliwić dostęp tylko do niektórych hostów LAN.
Teraz napraw trasy według własnego uznania, na przykład:
Sprawdź, czy naprawdę tam są:
Poprzednia, prostsza wersja tego hacka zawierała funkcję, która jedynie „zwróciła 0;” - na plakacie napisano, że „Jedynym efektem ubocznym, jaki do tej pory zaobserwowałem, jest to, że vpnagentd zużywa 100% procesora, jak donosi top, ale ogólny procesor to tylko 3% użytkownika i 20% systemu, a system doskonale reaguje Zgubiłem to, wydaje się, że robię dwa zaznaczenia w pętli, gdy bezczynnie wracam z obu szybko, ale nigdy nie czyta ani nie pisze - przypuszczam, że połączenie, które wyciąłem za pomocą LD_PRELOAD, powinno być przeczytane. aby to zrobić, ale do tej pory jest dla mnie wystarczająco dobry. Jeśli ktoś ma lepsze rozwiązanie, proszę się podzielić. ”
Problem z trywialnym włamaniem polega na tym, że jeden rdzeń procesora cały czas jest w 100%, co skutecznie zmniejsza liczbę wątków procesora o jeden - niezależnie od tego, czy połączenie VPN było aktywne, czy nie. Zauważyłem, że wybory dokonywane przez kod znajdowały się w gnieździe netlink, który wysyła dane vpnagentd, gdy zmienia się tabela routingu. vpnagentd ciągle zauważa, że w gnieździe netlink pojawiła się nowa wiadomość i wywołuje routeCallBackHandler, aby sobie z tym poradzić, ale ponieważ trywialny hack nie usuwa nowej wiadomości, po prostu ciągle jest wywoływany. nowy kod podany powyżej opróżnia dane netlink, więc nie ma końca pętla, która spowodowała 100% procesora.
Jeśli coś nie działa
gdb -p $(pidof vpnagentd)
, po dołączeniu wykonaj :i sprawdź, w której rozmowie jesteś. Następnie zgadnij, którą chcesz wyciąć, dodaj ją do hack.c i ponownie skompiluj.
źródło
_ZN27CInterfaceRouteMonitorLinux20routeCallbackHandlerEv
?nm /opt/cisco/anyconnect/lib/libvpnagentutilities.dylib | grep routeCallbackHandlerEv
a potem znajdziesz__ZN25CInterfaceRouteMonitorMac20routeCallbackHandlerEv
nm /opt/cisco/anyconnect/lib/libvpnagentutilities.so
powracanm: /opt/cisco/anyconnect/lib/libvpnagentutilities.so: no symbols
na moim AnyConnect pod Ubuntu, więc został wygenerowany bez informacji o tablicy symboli. Jak mogłeś to zdobyć?Jest to BARDZO skomplikowane, ale jeśli utworzysz minimalną maszynę wirtualną za pomocą programu VMWare Player lub podobnego i uruchomisz klienta Cisco AnyConnect VPN, możliwe jest skonfigurowanie routingu według potrzeb za pomocą wirtualnych kart sieciowych VMWare lub po prostu użyj Maszyna wirtualna do uzyskiwania dostępu do wszelkich wymaganych zasobów za pośrednictwem Cisco SSL VPN i „przeciągania / upuszczania” plików do / z rzeczywistej maszyny.
źródło
Oprogramowanie Shrew Soft VPN również załatwiło sprawę , jak sugerował Ian Boyd .
Może importować profile klientów Cisco VPN. Korzystałem z Cisco VPN Client w wersji 5.0.05.0290, a po zainstalowaniu Shrew VPN (wersja 2.1.7) i zaimportowaniu profilu Cisco mogłem uzyskać dostęp do lokalnej sieci LAN podczas połączenia z korporacyjnym VPN bez dodatkowej konfiguracji połączenia Shrew VPN (lub oprogramowanie).
źródło
Podziękowania dla Sashy Pachev za miły hack powyżej.
vpnagentd
miesza także z resolwerem, zastępując wprowadzone zmiany/etc/resolv.conf
. Rozwiązałem go, wygrywając z nim wyścig:Nie zapomnij o
chattr -i /etc/resolv.conf
odłączeniu.Próbuję rozwiązać ten problem, przechwytując wywołanie zwrotne, tak jak w przypadku metody route powyżej, ale nie mogę jeszcze znaleźć odpowiedniego wywołania zwrotnego lub metody.
Aktualizacja 1/2:
strace
Ujawniono, żevpnagentd
używainotify
interfejsu API do monitorowania zmian w pliku resolvera. Odtąd było z górki. Oto dodatkowy hack:Jest to trochę przesada, oczywiście, ponieważ wyłącza wszystkie sprawdzanie plików dla agenta. Ale wydaje się działać OK.
Poniższy skrypt opakowania klienta VPN integruje wszystkie funkcje (zaktualizowano, aby uwzględnić ten dodatkowy hack).
chattr
nie jest już używany / potrzebny.Aktualizacja 3: Naprawiono ustawienia nazwy użytkownika / hasła w skrypcie. Teraz używa
vpn.conf
pliku w formacie opisanym poniżej (i uprawnienia tylko do rootowania).źródło
Moja firma nadal używa tej VPN. Klient VPN po prostu zmienia ustawienia iptables w ten sposób:
Filtruje wszystko oprócz ruchu VPN.
Po prostu pobierz filtr do pliku za pomocą iptables-save, dodaj linie dostępu INPUT i OUTPOUT, które odpowiadają twoim potrzebom, i ponownie zastosuj plik za pomocą iptables-restore.
na przykład, aby uzyskać dostęp do sieci lokalnej na 192.168.0
źródło
Jakieś wieści dotyczące tego?
W pełni się zgadzam i zastanawiałem się nad tym samym.
W każdym razie jest to aplikacja, która wymaga uprawnień administratora do zainstalowania i podczas działania może bardzo dobrze filtrować to, co robisz ...
Moje próby na Windowsie też się nie powiodły:
Ha ha. Wygląda na to, że nie ma tutaj danych poniżej 20.
źródło
Nie wiem, czy dobrze to zrozumiałem, ale najpierw wyjaśniam swoje rozumienie:
Masz lokalną sieć LAN (na przykład 10.0.0.0/16 i zdalny serwer Cisco VPN Server (na przykład 64.0.0.0/16). Chcesz połączyć się z serwerem VPN za pośrednictwem klienta Cisco VPN, a mimo to potrzebujesz mieć dostęp do sieci LAN. W tym przypadku chcesz oddzielić całą wersję 10.0.xx / 16 od połączenia VPN). W kliencie Mac należy dodać następującą trasę:
gdzie en1 to interfejs, przez który jesteś podłączony do swojej sieci LAN. Wiem, że możesz dodać to samo w Windowsie i Linuksie.
źródło
Ponieważ nie mogę dodawać komentarzy, opublikuję tutaj. Korzystam z systemu Windows.
Rozwiązanie wykorzystujące maszynę wirtualną i uruchamiające AnyConnect wewnątrz maszyny wirtualnej, a następnie wykorzystujące maszynę wirtualną jako mediatora między środowiskiem pracy a siecią firmową, nie będzie działać, jeśli „ukochany” dział IT trasuje 0.0.0.0 przez VPN, a więc nawet sieć lokalną (w tym pomiędzy twoim lokalnym komputerem a maszyną wirtualną) jest kierowany przez VPN (sic!).
Próbowałem zastosować rozwiązanie opublikowane przez @Sasha Pachev, ale ostatecznie skończyło się łatanie .dll, aby na początku funkcji zwracało 0. W końcu po jakiejś walce z biblioteką dynamiczną mogłem modyfikować tabele routingu zgodnie z moimi potrzebami, ale najwyraźniej to nie wystarczy!
Mimo że moje zasady wydają się być poprawne, aby osiągnąć tunelowanie podzielone, nadal otrzymuję ogólne niepowodzenie. Czy natrafiłeś na podobny problem, który był w stanie rozwiązać?
Tak teraz wygląda moja tabela routingu (po ręcznych modyfikacjach, gdy VPN jest włączony)
ale wynik polecenia ping jest następujący
Tylko dla odniesienia poniżej pokazano, jak wygląda tabela tras, gdy VPN jest odłączony (niezmieniony)
i tak wygląda tabela, gdy VPN jest podłączony (niezmieniony), w tym przypadku, gdy próbuję pingować
8.8.8.8
, po prostu dostaję limit czasu (ponieważ zapora firmy nie pozwala na ruch wychodzący poza intranet)źródło
Dla tych, którzy chcą zachować kontrolę nad tabelą routingu podczas korzystania z Cisco AnyConnect SSL VPN, sprawdź OpenConnect . Oba obsługują Cisco AnyConnect SSL VPN i nie próbują zakłócać ani „bezpiecznie” wpisów w tablicy routingu. @Vadzim nawiązuje do tego w powyższym komentarzu .
Po wypróbowaniu wszystkiego oprócz załatania klienta AnyConnect Secure Mobility udało mi się go z powodzeniem zastąpić w systemie Windows za pomocą graficznego interfejsu użytkownika OpenConnect . Umożliwiło mi to utrzymanie łączności z zasobami lokalnymi (i zaktualizowanie tabeli routingu).
Używam OpenConnect w systemie Windows, ale obsługuje on także Linux, BSD i macOS (między innymi platformami) zgodnie ze stroną projektu .
źródło
Spróbuj usunąć te wpisy z bramą,
10.64.202.13
sprawdź, czy ping8.8.8.8
działa, a następnie dodaj je jeden po drugim i określ, który powoduje problem.Jak załatałeś DLL. Nie mogę nawet zmodyfikować tabeli routingu, ponieważ ciągle dodaje ona
0.0.0.0
bramę VPN.źródło