Serviços de hospedagem quando conectados ao OpenVPN

0

Às vezes eu hospedo serviços diferentes (servidores web, servidores de jogos, etc.) que eu gostaria de ser acessado através do meu endereço IP real, mesmo que eu esteja conectado a um servidor OpenVPN. No Windows eu não tive que mudar nada, apenas funcionou com as configurações padrão, como configurá-lo da mesma maneira no Linux?

    
por Krzaku 28.03.2017 / 23:50

1 resposta

0

Demorei um pouco, mas percebi. Não é tão fácil como eu esperava que fosse, mas funciona. Obrigado a @dirkt por me apontar na direção certa.

Primeiro, crie os seguintes scripts no diretório / 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" -- "$@"

Em seguida, adicione e ative um serviço systemd no arquivo /etc/systemd/system/internet-namespace.service (eu uso systemd-networkd para obter meu IP do meu roteador, se você usar outra coisa, altere-o abaixo para que a ponte seja configurada antes do cliente DHCP tentar para obter um endereço para isso):

[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

Em seguida, adicione essa linha ao arquivo sudoers (isso é opcional, ele fará com que você não tenha que inserir sua senha quando tentar usar o namespace que criamos):

%wheel ALL=NOPASSWD: /usr/local/bin/nsinternet

Não se esqueça de adicionar bridge0 ao seu cliente DHCP.

É isso. Ative o serviço openvpn-client e pronto. Agora, o espaço de nomes padrão é aquele que usa a conexão VPN e, se você quiser usar sua conexão de internet real, execute sudo nsinternet YOUR_COMMAND .

    
por 01.04.2017 / 13:41