Kierowanie całego ruchu przez VPN w systemie Ubuntu Linux

13

Po spędzeniu godzin na rozwiązywaniu problemów, przeszukiwaniu potencjalnych rozwiązań na tej stronie i innych, zrezygnowałem z błagania rad moich lepszych. Pracuję nad kierowaniem całego ruchu sieciowego na instancji Ubuntu przez Cisco VPN na uniwersytecie. Korzystając z wbudowanego menedżera sieci lub vpnc, mogę z powodzeniem ustanowić połączenie z VPN i mogę z powodzeniem kierować ruch do dowolnego uniwersyteckiego adresu IP przez VPN. Jednak poza tymi konkretnymi zakresami adresów IP nie mogę wyczarować żadnej trasy, która z powodzeniem zmapowałaby cały ruch sieciowy w sieci VPN.

Do tej pory próbowałem:

route add -net 0.0.0.0 gw homeportal dev tun tun0
Dodaj trasę -net 0.0.0.0 tun0
route add -net 0.0.0.0 gw 128.122.252.77 dev tun0
route add -net 0.0.0.0 gw 128.122.252.77 dev eth0
iptables -A DO PRZODU -o tun0 -j AKCEPTUJĘ
iptables -A DO PRZODU -i tun0 -j AKCEPTUJĘ
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

I wiele innych głupich, nieskutecznych rzeczy, których nie pamiętam na tyle dobrze, aby dokładnie opisać.

Ponadto próbowałem przekierować mniejsze zakresy adresów IP i określone adresy IP, każdy bezskutecznie. Nie jestem do końca pewien, co się dzieje, ponieważ zakres efektów, które mogłem zaobserwować, to błędy w rozpoznawaniu nazw i błędy w kierowaniu ruchem przez VPN. Co robię tutaj źle?

Edytować-

Oto dane wyjściowe ip route showpo uruchomieniu połączenia VPN z VPNC:

domyślnie przez 192.168.1.254 dev eth0 proto static 
10.0.0.0/8 dev tun0 link do zakresu 
91.230.41.0/24 dev tun0 link do zakresu 
128.122.0.0/16 dev tun0 link do zakresu 
128.122.252.68 przez 192.168.1.254 dev eth0 src 192.168.1.32 
128.122.253.46 dev tun0 link do zakresu 
128.122.253.79 dev tun0 link do zakresu 
172.16.0.0/12 dev tun0 link do zakresu 
192.168.0.0/16 dev tun0 link do zakresu 
192.168.1.0/24 dev eth0 proto jądro zakres link src 192.168.1.32 metryczny 1 
193.175.54.0/24 dev tun0 link do zakresu 
193.205.158.0/25 dev tun0 link do zakresu 
193.206.104.0/24 dev tun0 link do zakresu 
195.113.94.0/24 dev tun0 link do zakresu 
203.126.200.0/24 dev tun0 link do zakresu 
203.174.165.128/25 dev tun0 link do zakresu 
212.219.93.0/24 dev tun0 link do zakresu 
216.165.0.0/17 dev tun0 link do zakresu

Więcej informacji-

Z powodzeniem przekierowałem dowolny ruch przez VPN w MS Windows za pomocą klienta Cisco AnyConnect z domyślną konfiguracją. Oto jak wygląda tabela routingu, gdy działa klient AnyConnect (jest to inny komputer za tym samym routerem pod adresem 192.168.1.254).

Tabela tras IPv4
================================================== =========================
Aktywne trasy:
Metryka Interfejs sieci docelowej maski bramy
          0.0.0.0 0.0.0.0 192.168.1.254 192.168.1.13 30
         10.0.0.0 255.0.0.0 192.168.128.1 192.168.128.197 2
      91.230.41.0 255.255.255.0 192.168.128.1 192.168.128.197 2
        127.0.0.0 255.0.0.0 Łącze internetowe 127.0.0.1 306
        127.0.0.1 255.255.255.255 On-link 127.0.0.1 306
  127.255.255.255 255.255.255.255 On-link 127.0.0.1 306
      128.122.0.0 255.255.0.0 192.168.128.1 192.168.128.197 2
   128.122.252.68 255.255.255.255 192.168.1.254 192.168.1.13 31
       172.16.0.0 255.240.0.0 192.168.128.1 192.168.128.197 2
      192.168.0.0 255.255.0.0 192.168.128.1 192.168.128.197 2
      192.168.1.0 255.255.255.0 On-link 192.168.1.13 286
     192.168.1.13 255.255.255.255 On-link 192.168.1.13 286
    192.168.1.254 255.255.255.255 On-link 192.168.1.13 31
    192.168.1.255 255.255.255.255 Łącze internetowe 192.168.1.13 286
     192.168.31.0 255.255.255.0 On-link 192.168.31.1 276
     192.168.31.1 255.255.255.255 On-link 192.168.31.1 276
   192.168.31.255 255.255.255.255 Łącze 192.168.31.1 276
    192.168.128.0 255.255.255.0 On-link 192.168.128.197 257
  192.168.128.197 255.255.255.255 On-link 192.168.128.197 257
  192.168.128.255 255.255.255.255 On-link 192.168.128.197 257
    192.168.203.0 255.255.255.0 Łącze internetowe 192.168.203.1 276
    192.168.203.1 255.255.255.255 Łącze internetowe 192.168.203.1 276
  192.168.203.255 255.255.255.255 On-link 192.168.203.1 276
     193.175.54.0 255.255.255.0 192.168.128.1 192.168.128.197 2
    193.205.158.0 255.255.255.128 192.168.128.1 192.168.128.197 2
    193.206.104.0 255.255.255.0 192.168.128.1 192.168.128.197 2
     195.113.94.0 255.255.255.0 192.168.128.1 192.168.128.197 2
    203.126.200.0 255.255.255.0 192.168.128.1 192.168.128.197 2
  203.174.165.128 255.255.255.128 192.168.128.1 192.168.128.197 2
     212.219.93.0 255.255.255.0 192.168.128.1 192.168.128.197 2
      216.165.0.0 255.255.128.0 192.168.128.1 192.168.128.197 2
        224,0.0.0 240,0,0,0 Łącze internetowe 127.0.0.1 306
        224.0.0.0 240.0.0.0 Łącze 192.168.1.13 286
        224.0.0.0 240.0.0.0 Łącze internetowe 192.168.203.1 276
        224,0.0.0 240,0,0,0 Łącze internetowe 192.168.31.1 276
        224,0.0.0 240,0,0,0 Łącze 192.168.128.197 10000
  255.255.255.255 255.255.255.255 On-link 127.0.0.1 306
  255.255.255.255 255.255.255.255 On-link 192.168.1.13 286
  255.255.255.255 255.255.255.255 On-link 192.168.203.1 276
  255.255.255.255 255.255.255.255 On-link 192.168.31.1 276
  255.255.255.255 255.255.255.255 On-link 192.168.128.197 10000
================================================== =========================
deftfyodor
źródło
Wyobrażam sobie, że stanie się jasne, że routing sieciowy jest dla mnie całkiem nowy, więc doceniłbym dość wysoki poziom szczegółowości odpowiedzi.
deftfyodor
1
Byłoby pomocne, gdybyś mógł stwierdzić, czy korzystasz z dowolnego klienta (anyconnect?), A jeśli możesz opublikować tabelę routingu, dziękuję.
MariusMatutiae
Przy okazji, zrób to ip route.
user1686,
2
Tak, nie używaj przestarzałych poleceń routingu: użyj tablicy routingu ip dla tablicy routingu. Przestarzałe polecenia ukrywają niektóre zawiłości, które są możliwe i pomocne również w przypadku sieci VPN, nie mówiąc już o sieciach VLAN, ...
MariusMatutiae
@grawity, @MariusMatutiae - Jasne, edytowałem pytanie za pomocą polecenia wyjściowego. Dzięki, że wspomniałeś o ip routepoleceniu, nie spotkałem go wcześniej.
deftfyodor

Odpowiedzi:

3

Twoja sieć lokalna to 192.168.1.0/24, jak pokazuje ten wiersz w tabeli routingu:

 192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.32  metric 1

Twoja sieć VPN to 10.0.0.0/8, jak pokazano w tym wierszu:

 10.0.0.0/8 dev tun0  scope link 

Obecnie domyślnym routerem jest:

 default via 192.168.1.254 dev eth0  proto static 

czego oczywiście nie chcesz, ponieważ należy do lokalnej sieci LAN: w ten sposób wszystkie twoje rzeczy są kierowane przez lokalną bramę, tak jakby VPN nie istniał.

 You do have however, the all-important statement

 128.122.252.68 via 192.168.1.254 dev eth0  src 192.168.1.32  

która jest drogą do twojego dostawcy VPN.

EDYTOWAĆ:

Nie zdawałem sobie sprawy, że tabela routingu jest po prostu tabelą uzyskaną z Twojej sieci VPN bez Twojej interwencji. Może to wskazywać (pośrednio), że twój usługodawca jest skłonny przekazywać tylko ruch wyraźnie dozwolony w twojej tabeli przez interfejs tun0, i mógł podjąć dalsze kroki w celu zablokowania całego innego ruchu, w takim przypadku twoje wysiłki będą daremne.

Jednak przy założeniu, że Twój dostawca jest skłonny przekazać cały Twój ruch, musisz wykonać następujące czynności.

Najpierw musisz dowiedzieć się, czy istnieje brama gotowa zaakceptować twoje połączenie po drugiej stronie, ponieważ potrzebujemy jego adresu IP. Dam ci cztery metody, aby to zrobić.

1) Po podłączeniu komputera do sieci VPN spróbuj wykonać następujące polecenie:

   sudo dhclient -v tun0

Jeśli wszystko pójdzie dobrze, powinieneś zobaczyć odpowiedź zawierającą ten wiersz:

 DHCPOFFER of a.b.c.d from x.y.w.z

xywz to adres IP lokalnej bramy. Być może będziesz musiał zamknąć VPN po tym teście, a może nawet zrestartować komputer, ponieważ całkiem dobrze popsuliśmy tablicę routingu.

2) Alternatywnie możesz spróbować przejść do jednej z dozwolonych witryn (tych, które pojawiają się w tabeli routingu jako przechodzące przez interfejs tun0 ), a następnie wydać polecenie:

  ip neigh show

Powinieneś otrzymać listę komputerów, z którymi należy się skontaktować za pośrednictwem protokołu ARP, z adresami MAC i IP; najprawdopodobniej otrzymasz zero lub jedną odpowiedź. Jeśli otrzymasz jedną odpowiedź, to jest to twój router.

3) Jeśli nie otrzymasz takiej odpowiedzi, możesz spróbować

  sudo nmap -sn 10.0.0.0/8

(co będzie bardzo wolne). Twoja brama będzie jednym z wymienionych komputerów, najprawdopodobniej z adresem kończącym się na .1 lub .254, jeśli takie istnieją.

4) Użyj polecenia tcpdump:

  sudo tcpdump -n -i tun0

i zobacz adresy IP wyrzucone przez polecenie.

Jeśli nie otrzymasz również właściwej odpowiedzi na ten test, oznacza to, że ktoś naprawdę dokręcił śruby w swojej sieci.

Ale bądźmy optymistami i załóżmy, że masz teraz kandydujący adres IP xwyz dla zdalnego routera. Musisz usunąć domyślną bramę (jako sudo!):

  ip route del default via 192.168.1.254

dodaj nowy:

  ip route add default via x.w.y.z 

i spróbuj nawigować.

Powtórzę: ponieważ twój dostawca zezwolił na ruch tylko do kilku wybranych adresów IP za pośrednictwem swojej sieci VPN, możliwe, że mógł podjąć dodatkowe środki (= zapora ogniowa), aby uniemożliwić inteligentnemu użytkownikowi wymuszenie ruchu ogólnego za pośrednictwem swojej sieci VPN. W takim przypadku nic nie możesz zrobić. Ale jeśli nie, powyższe kroki powinny pomóc ci znaleźć rozwiązanie.

MariusMatutiae
źródło
Dziękuję za bardzo wyszukaną odpowiedź, jednak wchodząc w drugą połowę, mam trochę trudności. wynik ip addr show dev tun0odczytu 10: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1412 qdisc pfifo_fast state UNKNOWN group default qlen 500 link/none inet 192.168.128.193/24 brd 192.168.128.255 scope global tun0 valid_lft forever preferred_lft forever, bez obserwowanego adresu równorzędnego. Ponadto tabela routingu, którą opublikowałem wcześniej, w ogóle nie została przeze mnie zmodyfikowana - została wygenerowana całkowicie przez klienta VPN.
deftfyodor
@deftfyodor Proszę zobaczyć moją edycję.
MariusMatutiae
Za pomocą polecenia tcpdump rzeczywiście byłem w stanie rozpoznać bramę i skierować do niej domyślny ruch. Niestety, nadal działa tylko dla specjalnie wyposażonych zakresów adresów IP. Z pewnością jestem skłonny wierzyć, że istnieje jakiś dodatkowy środek bezpieczeństwa - jednak nie mam problemu z routingiem arbitralnego ruchu przez tę samą sieć VPN w MS Windows za pomocą klienta AnyConnect - więc na pewno musi być coś więcej.
deftfyodor
@deftfyodor Czy możesz sprawdzić, czy twoja tabela routingu w Windos różni się od tej w Linuksie?
MariusMatutiae
Zasadniczo jest podobny, chociaż istnieją pewne elementy, które się różnią, w szczególności 0.0.0.0 jest ustawione na trasę przez mój router sieciowy jako bramę, utrzymując bramę VPN jako interfejs. Zredagowałem pytanie, aby wyświetlić tabelę routingu systemu Windows.
deftfyodor
3

routeWe wszystkich twoich poleceniach brakuje masek sieciowych, więc pasują tylko do określonego 0.0.0.0adresu, a nie do całego Internetu. Więc zastąpić 0.0.0.0ze 0.0.0.0/0w pierwszym poleceniu próbowano:

ip route add -net 0.0.0.0/0 gw homeportal dev tun0

Może istnieć jedno zastrzeżenie, którego nie jestem pewien, czy Twój klient VPN rozwiązuje się sam: punkt końcowy tunelu musi zostać wykluczony z trasy przez VPN, musi być trasowany przez twój eth0interfejs. Jeśli więc dodanie tej domyślnej trasy spowoduje uszkodzenie sieci VPN, dodaj określoną trasę dla punktu końcowego VPN:

ip route add <ENDPOINT>/32 dev eth0

Teun Vink
źródło
2
Myślę, że ten drugi powinien być ip route, nie? Ponadto, chociaż zawsze dobrym pomysłem jest dodawanie route
masek sieciowych