Hosting-Dienste bei Verbindung mit OpenVPN

315
Krzaku

Manchmal hoste ich verschiedene Dienste (Webserver, Spieleserver usw.), die ich über meine echte IP-Adresse erreichen möchte, obwohl ich mit einem OpenVPN-Server verbunden bin. In Windows musste ich nichts ändern, es funktionierte einfach mit den Standardeinstellungen. Wie kann ich dies in Linux auf die gleiche Weise einrichten?

0
Sind Sie sicher, dass Sie immer noch eine dedizierte IP-Adresse haben, die von außen erreichbar ist? Heutzutage verwenden die meisten ISPs NAT, sodass Sie, egal was Sie auf Ihrem lokalen Rechner tun, nicht erreichbar sind. Eine Möglichkeit, verschiedene IP-Verbindungen zu verwenden, besteht darin, unterschiedliche Netzwerk-Namespaces für die Anwendungen zu verwenden, die eine Verbindung über VPN herstellen, und solche, die direkt eine Verbindung herstellen. dirkt vor 7 Jahren 0
@dirkt Ja, ich bin mir sicher, sobald ich die Verbindung zu OpenVPN trenne, werden die Server, die ich hoste, über diese IP verfügbar. Ich dachte, dass unterschiedliche Namespaces es erlaubten, echte IP für einige ausgehende Verbindungen und OpenVPN für andere zu verwenden? Keine eingehenden Verbindungen? Krzaku vor 7 Jahren 0
Ah, gehostete Server. Solange Sie sich in einem anderen Netzwerk-Namensraum befinden, werden alle Verbindungen, egal ob eingehend oder ausgehend, gemäß den Einstellungen im Namensraum behandelt. Warum glauben Sie, dass eingehende Verbindungen anders sind? Ein Namespace mit dem Endpunkt "tun0" von VPN für VPN-Verbindungen, ein globaler Namespace für direkte Verbindungen. dirkt vor 7 Jahren 0

1 Antwort auf die Frage

0
Krzaku

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