OpenVPN selektiv #3: SOCKS
Damals, mit dem RaspberryPi, war es schon äußerst umständlich und ineffizient, eine OpenVPN-Verbindung im Netzwerk zu teilen.
Davon abgesehen, fehlte dort noch DHCP, zur automatischen Beziehung von IP-Adressen, ganz zu schweigen von IPv6...
Danke, mit mir nicht.
Es geht auch einfacher, ohne groß etliche Systemeinstellungen ändern oder sich mit
Mit einem SOCKS-Proxy. Einen SOCKS-Proxy aufzusetzen, ist mit Linux-Bordmitteln so einfach:
Der eingebaute SOCKS-Proxy in OpenSSH hat nur 2 Nachteile:
Es muss also ein richtiger SOCKS-Proxy her: Dante.
Die in den Debian-Archiven (auch unstable) vorhandene Version ist komplett veraltet, deshalb muss direkt vom Source kompiliert werden.
Gestartet wird später mit
Zuallererst aber muss selbstredend die
Hierfür kann die OpenVPN Konfiguration aus OpenVPN selektiv #1 verwendet werden.
Das Schöne an diesem Setup ist, abgesehen vom DNS-Leak, welcher demnächst gefixt wird, dass alle Clients im Netzwerk, bei Bedarf, für einzelne Applikationen, die VPN-Verbindung nutzen können.
Im
müssen entsprechende Routen für die DNS-Server Adressen über das Tunnelinterface gesetzt werden, hier die Google-DNS-Server.
Zu den ganzen Leaks gibt's eventuell irgendwann einen extra Post.
Davon abgesehen, fehlte dort noch DHCP, zur automatischen Beziehung von IP-Adressen, ganz zu schweigen von IPv6...
Danke, mit mir nicht.
Es geht auch einfacher, ohne groß etliche Systemeinstellungen ändern oder sich mit
iptables & ip6tables
befassen zu müssen:Mit einem SOCKS-Proxy. Einen SOCKS-Proxy aufzusetzen, ist mit Linux-Bordmitteln so einfach:
ssh -D 1080 myserver.tld
Der eingebaute SOCKS-Proxy in OpenSSH hat nur 2 Nachteile:
- UDP fehlerhaft/nicht implementiert
- ausgehendes Interface/IP-Adresse nicht wählbar
Es muss also ein richtiger SOCKS-Proxy her: Dante.
Die in den Debian-Archiven (auch unstable) vorhandene Version ist komplett veraltet, deshalb muss direkt vom Source kompiliert werden.
/etc/sockd.conf
#logging
logoutput: /var/log/sockd.log
#logoutput: /dev/null
#errorlog: /dev/null
internal: 0.0.0.0 port = 1080
internal: :: port = 1080
external: tun0
resolveprotocol: udp # DNS
clientmethod: none
socksmethod: none
user.notprivileged: nobody
#accept connections from any IPv4 client
client pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
}
#accept connections from any IPv6 client
client pass {
from: ::/0 to: ::/0
}
#accept connections to any IPv4 server
socks pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
protocol: tcp udp
}
#accept connections to any IPv6 server
socks pass {
from: ::/0 to: ::/0
protocol: tcp udp
}
Gestartet wird später mit
/usr/local/sbin/sockd -D
.Zuallererst aber muss selbstredend die
tun0
Tunnelverbindung bestehen. Hierfür kann die OpenVPN Konfiguration aus OpenVPN selektiv #1 verwendet werden.
Das Schöne an diesem Setup ist, abgesehen vom DNS-Leak, welcher demnächst gefixt wird, dass alle Clients im Netzwerk, bei Bedarf, für einzelne Applikationen, die VPN-Verbindung nutzen können.
Im
Openvpn --up
Skript:ip route add 8.8.8.8/32 via "$ifconfig_local" dev "$dev"
ip route add 8.8.4.4/32 via "$ifconfig_local" dev "$dev"
müssen entsprechende Routen für die DNS-Server Adressen über das Tunnelinterface gesetzt werden, hier die Google-DNS-Server.
Zu den ganzen Leaks gibt's eventuell irgendwann einen extra Post.