Ich habe eine Weile gebraucht, aber ich habe es herausgefunden. Nicht so einfach, wie ich gehofft hatte, aber es funktioniert. Vielen Dank an @dirkt für die richtige Richtung.
Erstellen Sie zunächst die folgenden Skripts im Verzeichnis / usr / local / bin:
nsstart
:
#!/bin/sh # Enable eno1 interface # eno1 is the name of the interface I get my connection from, change it so it fits your system ip link set eno1 up # Add 'internet' namespace ip netns add internet # Create veth pair and add veth1 to 'internet' namespace ip link add type veth ip link set veth1 netns internet ip link set veth0 up # Create bridge interface and add eno1 and veth0 to it ip link add type bridge ip link set bridge0 up ip link set eno1 master bridge0 ip link set veth0 master bridge0 # Enable namespace interfaces, add IP and route ip netns exec internet ip link set lo up ip netns exec internet ip link set veth1 up # Set a free IP from your routers IP range here # You can also use a DHCP client if you have one, mine didn't work with namespaces ip netns exec internet ip addr add 192.168.1.99/24 dev veth1 # Set IP of the router here ip netns exec internet ip route add default via 192.168.1.1 metric 10
nsinternet
:
#!/bin/sh # Execute the command in internet namespace as user who called sudo ip netns exec internet sudo -u "#$SUDO_UID" -g "#$SUDO_GID" -- "$@"
Fügen Sie dann einen systemd-Dienst hinzu und aktivieren Sie ihn in einer Datei /etc/systemd/system/internet-namespace.service
(ich verwende systemd-networkd
meine IP-Adresse von meinem Router, wenn Sie etwas anderes verwenden, ändern Sie ihn unten, damit die Bridge eingerichtet wird, bevor der DHCP-Client versucht, eine Adresse dafür zu erhalten):
[Unit] Description=Sets up a namespace that uses real internet connection instead of OpenVPN After=systemd-udevd.service Before=systemd-networkd.service network.target Wants=network.target [Service] Type=oneshot RemainAfterExit=1 ExecStart=/usr/local/bin/nsstart [Install] WantedBy=multi-user.target
Fügen Sie dann diese Zeile zur sudoers
Datei hinzu (dies ist optional, da Sie sie nicht eingeben müssen, wenn Sie versuchen, den von uns erstellten Namespace zu verwenden):
%wheel ALL=NOPASSWD: /usr/local/bin/nsinternet
Vergessen Sie nicht bridge0
, Ihren DHCP-Client hinzuzufügen .
Das ist es. Aktivieren Sie den openvpn-Client-Dienst und Sie können loslegen. Jetzt ist der Standard-Namespace der, der die VPN-Verbindung verwendet. Wenn Sie Ihre echte Internetverbindung verwenden möchten, müssen Sie sie nur ausführen sudo nsinternet YOUR_COMMAND
.