Mam VPS z systemem CentOS 7, z którym łączę się za pomocą SSH. Chciałbym uruchomić klienta OpenVPN na VPS, aby ruch internetowy był kierowany przez VPN, ale nadal pozwalał mi łączyć się z serwerem przez SSH. Kiedy uruchamiam OpenVPN, moja sesja SSH zostaje rozłączona i nie mogę już połączyć się z moim VPS. Jak skonfigurować VPS, aby umożliwić przychodzące połączenia SSH (port 22), aby były otwarte na rzeczywistym adresie IP VPS (104.167.102.77), ale nadal kierowały ruch wychodzący (np. Z przeglądarki internetowej na VPS) przez VPN?
Używam usługi OpenVPN PrivateInternetAccess, a przykładowy plik config.ovpn to:
klient dev tun proto udp zdalny nl.privateinternetaccess.com 1194 resolv-retry nieskończoność nobind trwały klucz persist-tun ca ca.crt klient tls serwer zdalnego certyfikatu tls auth-user-pass comp-lzo czasownik 1 reneg-sec 0 crl-Verify crl.pem
Adres IP VPS:
1: lo: mtu 65536 qdisc stan noqueue NIEZNANY link / loopback 00: 00: 00: 00: 00: 00 brd 00: 00: 00: 00: 00: 00 inet 127.0.0.1/8 zakres host lo valid_lft na zawsze preferowany_lft na zawsze Host inet6 :: 1/128 valid_lft na zawsze preferowany_lft na zawsze 2: ens33: mtu 1500 qdisc pfifo_fast state UP qlen 1000 link / ether 00: 50: 56: be: 16: f7 brd ff: ff: ff: ff: ff: ff inet 104.167.102.77/24 brd 104.167.102.255 zakres globalny ens33 valid_lft na zawsze preferowany_lft na zawsze inet6 fe80 :: 250: 56ff: febe: 16f7 / 64 link scope valid_lft na zawsze preferowany_lft na zawsze 4: tun0: mtu 1500 qdisc pfifo_fast stan NIEZNANY qlen 100 link / none inet 10.172.1.6 peer 10.172.1.5/32 scope global tun0 valid_lft na zawsze preferowany_lft na zawsze
Trasa ip VPS:
0.0.0.0/1 przez 10.172.1.5 dev tun 0 domyślnie poprzez 104.167.102.1 dev ens33 proto static metric 1024 10.172.1.1 via 10.172.1.5 dev tun 0 10.172.1.5 dev tun0 proto link do zakresu jądra src 10.172.1.6 104.167.102.0/24 dev ens33 proto kernel scope link src 104.167.102.77 109.201.154.177 via 104.167.102.1 dev ens33 128.0.0.0/1 przez 10.172.1.5 dev tun 0
route
lubip route show
) i usunąć ją?To może być trochę za późno, ale ...
Problem polega na tym, że brama domyślna zostaje zmieniona przez OpenVPN, i to przerywa twoje obecne połączenie SSH, chyba że skonfigurujesz odpowiednie trasy przed uruchomieniem OpenVPN.
To, co następuje, działa dla mnie. Wykorzystuje iptables i ip (iproute2). Poniżej zakłada się, że domyślnym interfejsem bramy przed uruchomieniem OpenVPN jest „eth0”. Chodzi o to, aby podczas nawiązywania połączenia z eth0, nawet jeśli eth0 nie był już domyślnym interfejsem bramy, pakiety odpowiedzi dla połączenia wracały ponownie do eth0.
Możesz użyć tego samego numeru dla znaku połączenia, znaku zapory i tablicy routingu. Użyłem różnych liczb, aby różnice między nimi były bardziej widoczne.
===
AKTUALIZACJA:
Powyższe działa dobrze dla mnie w Debian Jessie. Ale w starszym systemie Wheezy właśnie odkryłem, że muszę dodać „via” do wpisu tablicy routingu:
Tam „12.345.67.89” musi być oryginalną bramą inną niż VPN.
źródło
ip route add default
)? Pojawia się komunikat „Odpowiedzi RTNETLINK: plik istnieje”. Używam Ubuntu Xenial. „via” nie pomaga. Właśnie wypróbowałem to na Arch Linux, najpierwip route add default
wydaje się, że się udało, aleip route
wyjście się nie zmienia. Każde kolejne uruchomienie powoduje wyświetlenie komunikatu „plik istnieje”.ip route show table all | grep 3412
. I bez „przez” nie ustanowione (jeśli się nie mylę) połączenia przestają działać (Ubuntu Xenial). Przynajmniej jestem w stanie poprawić tabelę routingu. Niemniej jednak nie mogę uzyskać dostępu do serwera po uruchomieniuopenvpn
.Na podstawie odpowiedzi @MrK napisałem tutaj prosty kod, aby przyspieszyć wykonanie zadania, dzięki czemu nie musisz sprawdzać interfejsów / adresu IP:
Wypróbowałem ten skrypt na 4 moich VPS i działa idealnie.
źródło
hmm wygląda na to, że podsieć ip nakłada się na siebie .... nie wiedząc więcej o twoim schemacie ip, innym niż publiczny ip dla twojej ternminacji VPN jako nl.privateinternetaccess.com, nie jest tego pewne.
na przykład jeśli zdalna podsieć po drugiej stronie nl.privateinternetaccess.com to 10.32.43.0/24, a Twoja instancja znajduje się w vs vpc, której podsieć to 10.32.44.0/24. ale twój źródłowy klient ssh żyje 10.32.43.0/24 (twoja strona aws vpc), to nie będzie działać, ponieważ ruch powrotny ssh będzie błędnie przekazywany przez vpn do Holandii.
podaj pełne informacje o adresie IP / podsieci, aby uzyskać dodatkową pomoc.
...
ok, więc ... wygląda na to, że twoja domyślna trasa jest w tunelu po podłączeniu do nl:
więc możesz to zmienić po połączeniu. wiele razy serwery VPN dają fałszywe trasy. szczególnie w niechlujnym korpusie. w tym przypadku pchają domyślną trasę do ciebie, więc cały ruch z vps box będzie nl. zmień domyślną trasę na 104.167.102.x lub inną bramę podsieci ur, która znajduje się u dostawcy vps.
źródło
Po uruchomieniu VPN twoja brama domyślna jest zastępowana. Oznacza to, że wszelki ruch generowany z twojego urządzenia lub kierowany przez niego będzie przekierowywany do bramy VPN.
Prostym rozwiązaniem jest odfiltrowanie całego ruchu, którego nie chcesz kierować przez VPN i zrobienie z nim czegoś innego. Jedną z możliwości jest odebranie ruchu generowanego z twojego urządzenia za pomocą lokalnego adresu źródłowego i skierowanie go przez lokalną bramę. Dzięki temu usługi takie jak SSH działają poprawnie.
Zrobimy to tutaj. Najpierw utwórz nową tabelę routingu i dodaj domyślną trasę, która trasuje wszystko przez bramę lokalną:
Następnie utwórz nową regułę filtrowania pakietów, która oznaczy cały ruch wychodzący z twojego adresu źródłowego z pewnym identyfikatorem.
Na koniec utwórz zasadę routingu, która zbiera cały wyżej zaznaczony ruch i kieruje go przy użyciu wygenerowanej tabeli powyżej.
Jeszcze raz wartości
<mark>
i<table>
są dowolnymi identyfikatorami według własnego wyboru.źródło
Dla mnie z uruchomieniem serwera OpenVPN w pfSense było odznaczenie ustawienia „Wymuś cały ruch IPv4 generowany przez klienta przez tunel”.
źródło