OpenVPN Volltunnel trennt deng SSH-Sessioun: reparéier den Zréckwee
D'Standardroute schéckt SSH-Antworte an den Tunnel. Pinn de Peer, filter redirect-gateway oder route no Quell, ier s de Maschinn verléiers.
En OpenVPN-Client mat Volltunnel op enger Maschinn anzeschalten, op déi s du iwwer SSH kommst, kann d'Sessioun an enger Sekonn trennen, an d'Maschinn mécht näischt falsch. Den Tunnel ännert net, wéi d'Paketen de Server erreechen; hien ännert, wéi d'Antworte rauskommen. Soubal d'Standardroute op tun0 weist, geet eng Äntwert un däin SSH-Client an d'Netzwierk vum Provider, dat kee Wee zréck op deng Adress huet. D'Verbindung hänkt, den nächsten Versuch leeft of, an den Daemon lauschtert déi ganz Zäit nach op Port 22.
Lies d'Routingstabell, ier s de de VPN-Log lies. De Log wäert soen, datt den Tunnel eropkomm ass, an hien huet Recht. D'Fro ass, op wéi eng Interface all Äntwert iwwerginn gëtt, an dat ass eng Sich pro Paket an enger Tabell, déi den Tunnel just nei geschriwwen huet.
Firwat d'Äntwert duerch déi falsch Dier erausgeet
Erauskommend Pakete kommen nach ëmmer op der physescher Interface un, well en VPN-Client net ännere kann, wéi d'Internet d'ëffentlech Adress vun dengem Server erreecht. Äntwerten si eng separat Entscheedung: fir all Paket sicht de Kernel d'Destinatioun, an nom --redirect-gateway seet den Standardariichtung Tunnel. Den Ausgang vum Provider gesäit eng Destinatioun, déi hien net bedéngt, an hëlt de Paket eraus.
De Schutz vun OpenVPN selwer deckt genee eng Destinatioun of. Den Handbuch vun 2.6 beschreift --redirect-gateway als eng Sequenz: et setzt eng Hostroute fir de VPN-Peer iwwer de Gateway derbäi, deen virum Tunnel am Gebrauch war, sou datt de verschlësselte Verkéier net an sech selwer zrécklafe kann, an ersetzt duerno d'Standardroute. Déi Hostroute ass nëmme fir de Peer. Däin SSH-Client ass just nach eng Internetadress a kritt keng Ausnam.
Ee Präfixfehler ass et wäert, fréi auszeschléissen. ip route add -net 0.0.0.0 gw 10.8.0.1 dev tun0 ouni Längt entsprécht der eenzeger Adress 0.0.0.0, net dem Internet; et muss 0.0.0.0/0 sinn. An wann d'Standardroute ze huelen den eegenen Transport vum Tunnel brécht, setz den Endpunkt als Hostroute iwwer déi physesch Interface derbäi, mat der richteger Adress vum Provider.
Pinn deng SSH-Clientadress fir eng direkt Reparatur
Déi séierst Reparatur ass eng Hostroute fir deng Clientadress iwwer de Gateway, deen de Server virum Tunnel benotzt huet. Vu denger Säit: fann d'Adress, déi de Server gesäit, a lies duerno d'Tabell vum Server, fir dee ale Gateway ze kennen:
curl -s https://ifconfig.co
ip route
Um Server setz d'Ausnam derbäi, ier den Client start. D'Adressen hei sinn Platzhalter; d'Form ass wat zielt:
sudo ip route add 80.128.240.55 via 192.168.178.1
Dëst ass d'Reparatur, déi am gemellte Fall benotzt gouf, an et funktionnéiert direkt. Et ass och fragil op zwou viraussobar Weeër: d'Route verschwënnt beim Neistart, an et gëtt falsch an deem Moment, wou däin ISP der eng aner Adress gëtt. Behandel et als Noutmoossnam an maach et bewosst dauerhaft, iwwer eng Netzwierkeenheet oder en Dispatcher-Hook, oder akzeptéier, datt et temporär ass, a schreif de Wee zréck op.
Verhënnert, datt de Client d'Standardroute hëlt
Déi méi propper Optioun ass, den Tunnel d'Standardroute guer net ersetzen ze loossen. route-nopull, zesumme mat --client oder --pull benotzt, akzeptéiert déi gedréckt Optiounen ausser Routen, block-outside-dns an DHCP-änlech Optiounen wéi DNS-Server, sou datt s de nëmmen d'Präfixer derbäisetz, déi s de brauchs. En nach méi schmuelen Instrument ass e Pull-Filter, deen eng problematesch Direktiv eraushëlt an de Rescht behält:
route-nopull
pull-filter ignore "redirect-gateway"
Benotz dat engt oder dat anert, net béides, a sief dir kloer, wat sech ännert. Ouni Standardroute duerch den Tunnel surft de Server net méi iwwer de Provider am Internet; hie kritt nëmmen dat, wat s de explizit geroutet hues. Wann de Volltunnel den ganze Sënn vum Setup war, ass dëst de falsche Knäppchen an d'Hostroute uewendriwwer ass déi richteg.
Deel de Zréckwee no Quell oder no Verbindung
Wann déi erakomm Adress stabil ass, hält eng Quellregel d'Äntwerten lokal, ouni d'eegen Route vum Tunnel unzepaken. Gëff der Adress vun der physescher Interface eng eege Tabell mat dem LAN-Präfix an dem physeschen Standard, a wiels duerno déi Tabell fir Verkéier, deen dovunner kënnt:
ip rule add from 192.168.1.11 table 128
ip route add table 128 to 192.168.1.0/24 dev eth0
ip route add table 128 default via 192.168.1.1
Dëst funktionnéiert, well Äntwerten op eng erakomm SSH-Verbindung aus der Adress kommen, mat där sech den Client verbonnen huet. E gemellte Fall, an deem all erakomm Service huet misse weiderlafen, huet genee déi Form benotzt. Wann déi erakomm Adress schwëmmt oder de Wee dynamesch ass, markéier amplaz d'Verbindung: setz eng Conntrack-Mark op deen éischte Paket vun der physescher Interface, kopéier se an OUTPUT op d'Äntwertpaketen, a route markéiert Paketen duerch eng Tabell, déi op de physesche Gateway weist.
iptables -t mangle -A PREROUTING -i eth0 -m conntrack --ctstate NEW -j CONNMARK --set-mark 1234
iptables -t mangle -A OUTPUT -m connmark --mark 1234 -j MARK --set-mark 4321
ip route add default via 192.168.1.1 dev eth0 table 3412
ip rule add fwmark 4321 table 3412
Hal den Uschloss-Mark, de Firewall-Mark an d'Tabellnummer beim Teste getrennt. Eng Nummer fir zwou Rolle widderzebenotze gëtt eng Regel, déi richteg ausgesäit an déi falsch Paketen trëfft. D'Standardariichtung vun der Tabell brauch och via mam LAN-Gateway op engem gewéinlechen Ethernet-Link; e blosse dev eth0 funktionnéiert nëmmen, wann d'Interface Punkt-op-Punkt ass oder den nächste Sprong op eng aner Manéier geléist gëtt. De gemellten Jessie-Host souz zoufälleg op engem Link, wou déi blooss Form funktionnéiert huet, wat keng Distributiounsregel ass, déi een ofschreiwe soll.
Iwwerpréif, ouni dech auszespaeren
Test net duerch ofzehänken. Hal déi éischt Sessioun op, bréng den Tunnel erop, a frot de Kernel, wéi ee Wee deng eege Adress huelen:
ip route get 80.128.240.55
D'Äntwert sollt déi physesch Interface an dee ale Gateway nennen, net den Tunnel. Da maach eng zweet SSH-Verbindung op; dat ass den echte Test, well déi al Sessioun op engem Zoustand kënnt iwwerliewe, deen eng nei Verbindung net ka reproduzéieren. Wann déi zweet hänkt, während déi éischt nach äntwert, huet d'Regel ni de Verkéier getraff, op deen et ukënnt, an d'Marken oder d'Quelladress sinn, wou ee kucke muss.
Hal eng Konsole baussent dem Band während der ganzer Übung parat. E Server, deem säin eenzege Wee eraus den Tunnel ass, deen s de just futti gemaach hues, kann net iwwer dee selwechten Tunnel reparéiert ginn, an de Réckzuch ass méi einfach, wann s de d'Tabellnummeren an d'Präfixer opgeschriwwen hues, déi s de derbäigesat hues.