Networking Encapsulamento de um servidor doméstico através de um IP de failover dedicado

2

Estou montando um servidor caseiro que será hospedado na casa de um amigo que tenha conexão de fibra (vamos chamá-lo Home Dedicated Server: HDS), mas, eu não quero usar sua conexão IP diretamente, eu quero para usar a conexão de um Servidor Dedicado (vamos chamá-lo de DS) que protegerá seu próprio IP, fornecerá uma boa proteção contra DDoS e uma melhor consistência de interconexão com o resto da Internet.

Para essa matéria, recebi um IP secundário (também chamado de "failover") para esse servidor dedicado. Eu gostaria de usar esse IP como um túnel para meu HDS, para que meu HDS possa ser alcançado diretamente por meio do failover, como se fosse seu próprio IP de interface, sem a necessidade de adicionar um redirecionamento de porta específico a qualquer novo serviço implantado.

Exemplo:
- Diga que o IP secundário é 127.1.2.3
- Estou hospedando um serviço na porta 22 no meu HDS
- Então qualquer cliente da internet pode se conectar a 127.1.2.3:22 e alcançar o HDS diretamente. - Por outro lado, o HDS usaria o IP secundário como um gateway para acessar a internet também.

O problema é: embora eu tenha certeza de que é mais difícil explicar o que realmente faço, não tenho ideia de como conseguir exatamente isso, e o que pesquisar na Web, e é por isso que estou aqui para obter algumas iluminação. Meu palpite (e espero) é que algum roteamento inteligente + uma conexão VPN poderia ser suficiente para conseguir isso.

Eu fiz um esquema de pintura simples se puder ajudar a entender o que estou tentando alcançar.

Qualquer orientação apreciada.

    
por UltimateByte 06.02.2017 / 12:06

1 resposta

2

Bem, como sempre, quando recebi uma pergunta complicada, sou capaz de respondê-la depois de um dia inteiro de trabalho.

Para o servidor / gateway

Digamos que o padrão do meu servidor (interface e IP público) seja d.d.d.d para o resto do meu exemplo.

1) Obtenha um IP de failover (IP adicional), para este exemplo digamos que é f.f.f.f
2) Uma vez recebido, adicione este ip a /etc/network/interfaces

auto eth0:0
iface eth0:0 inet static
address f.f.f.f
netmask 255.255.255.255
broadcast f.f.f.f

Em seguida, aplique as alterações com: /etc/init.d/networking restart

3) Configure um servidor openvpn. Há muitos tutoriais por aí ... A maioria são tutoriais horríveis em sua maior parte. O único conselho que posso dar é começar a partir das configurações padrão que você pode encontrar na ajuda dirs depois de instalar o openvpn. Então, partes importantes da configuração necessária para conseguir um servidor adequado para nosso propósito. De minha parte, o arquivo de configuração é /etc/openvpn/servervpn.conf

# IP and protocols
local d.d.d.d # Listen to your default server IP
port 1194 # Default port, perfectly fine to me
proto udp # Heard there were issues with tcp
dev tap # Can use tun as well
# Certificates and encryption
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
tls-auth ta.key 0
cipher AES-256-CBC
# Tunnel network
server 10.8.0.0 255.255.255.0 # I'm sticking to default range which is fine
comp-lzo
# DNS servers provided by opendns.com.
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
# Keepalive
keepalive 10 120
# Safety
user nobody
group nogroup
persist-key
persist-tun
# Logging
status openvpn-status.log
log-append /var/log/openvpn.log
verb 5
mute 20

Em seguida, reinicie o serviço com systemctl restart [email protected]
Se a configuração não for perfeitamente perfeita, nenhum erro e nenhum logging serão fornecidos, portanto, boa sorte para encontrar o que está errado.

4) Iptables Você precisa redirecionar o tráfego que entra no failover para o túnel VPN e retransmitir os pacotes do cliente VPN para a rede também. Essa é a parte que foi a mais dolorosa de encontrar ... Então, espere que você goste.
Substitua f.f.f.f pelo seu failover ip, e 10.8.0.0/24 é a rede VPN padrão, portanto, mude de acordo se não usar a padrão.
Cuidado, o último IP é o IP do meu cliente VPN, pode mudar, mas para mim é 10.8.0.4

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to-source f.f.f.f
iptables -t nat -A PREROUTING -d f.f.f.f -j DNAT --to-destination 10.8.0.4

Para o lado do cliente VPN (servidor inicial)

1) Atribuir um IP fixo para o seu servidor doméstico usando a atribuição de MAC, então o IP do servidor local para mim é 192.168.1.2, mas isso não importa muito 2) Redirecionar a porta 1194 udp (porta padrão para o OpenVPN, mas você pode usar o que quiser) para o seu IP do servidor local, no meu caso 192.168.1.2 3) Instale o openvpn e conecte-se ao seu servidor VPN. Muitos tutoriais, mas configurações importantes em /etc/openvpn/client.conf no meu caso:

client
remote d.d.d.d 1194 # your server main/default IP
dev tap # can use tun as well
proto udp # tcp seems to have issues
remote my-server-1 1194
resolv-retry infinite
user nobody
group nogroup
# Try to preserve some state across restarts.
persist-key
persist-tun
# Certs
ca ca.crt
cert client1.crt
key client1.key
ns-cert-type server
tls-auth ta.key 1
cipher AES-256-CBC # Might vary depending on how you set it
# Compression
comp-lzo
# Log verbosity
verb 3

Em seguida, reinicie o cliente: systemctl reinicie o [email protected]

Certifique-se de que sua política de firewall esteja configurada para aceitar todos (a menos que você saiba o que está fazendo) e esteja pronto para começar.

Agora, ele deve agir como se o seu IP de failover fosse o IP do seu servidor doméstico, exceto que seus serviços precisam ouvir o IP da VPN ou 0.0.0.0.

Espero que este post seja útil para os outros.

Descobri o iptables necessário graças a este artigo francês, então graças a eles: link

    
por 07.02.2017 / 16:51