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 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.