O objetivo é ter o servidor OpenVPN principal e várias sub-redes OpenVPN acessíveis aos principais clientes do servidor. Todos os servidores de sub-redes também são clientes do servidor principal.
Aqui estão as configurações:
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
server 10.0.0.0 255.255.0.0
push "route 10.0.0.0 255.255.0.0"
push "route 10.1.0.0 255.255.0.0"
client-config-dir ccd
client-to-client
keepalive 10 120
tls-server
tls-auth ta.key 0
comp-lzo
ccd/subserver1
ifconfig-push 10.0.0.6 10.0.0.5
iroute 10.1.0.0 255.255.0.0
client
dev tun
proto udp
remote <ip> 1194
remote-random
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert subserver1.crt
key subserver1.key
tls-client
tls-auth ta.key 1
cipher BF-CBC
comp-lzo
verb 3
pull
port 1195
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
server 10.1.0.0 255.255.0.0
push "route 10.0.0.0 255.255.0.0"
push "route 10.1.0.0 255.255.0.0"
client-to-client
keepalive 10 120
tls-server
tls-auth ta.key 0
comp-lzo
persist-key
persist-tun
iptables -t nat -A POSTROUTING -s 10.0.0.0/16 -o eth0 -j MASQUERADE
Eu suponho que algo está faltando no iptables, eu não tenho experiência suficiente para descobrir isso. O mais fácil é usar a opção push "dhcp-option DNS 10.1.0.1"
na configuração principal do servidor. Existe alguma maneira de configurar o servidor DNS no servidor OpenVPN? Ou alguma outra maneira de lidar com isso?
ATUALIZAÇÃO (2.03.2016)
Veja o que consegui alcançar: Diagrama de rede
Rotas principais do servidor:
0.0.0.0 <external ip> 0.0.0.0 UG 0 0 0 eth0
10.0.0.0 10.0.0.2 255.255.0.0 UG 0 0 0 tun0
10.0.0.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
10.1.0.0 10.0.0.2 255.255.0.0 UG 0 0 0 tun0
10.2.0.0 10.0.0.2 255.255.0.0 UG 0 0 0 tun0
Rotas Subserver1:
0.0.0.0 <external ip> 0.0.0.0 UG 0 0 0 eth0
10.0.0.0 10.0.0.5 255.255.0.0 UG 0 0 0 tun1
10.0.0.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun1
10.1.0.0 10.1.0.2 255.255.0.0 UG 0 0 0 tun0
10.1.0.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
10.2.0.0 10.0.0.5 255.255.0.0 UG 0 0 0 tun1
Rotas do Client1:
0.0.0.0 <external ip> 0.0.0.0 UG 0 0 0 eth0
10.1.0.0 10.1.0.5 255.255.0.0 UG 0 0 0 tun0
10.1.0.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
Com isso eu poderia ssh para os subservers do superusuário usando tun0 e tun1 ips (e isso me confunde muito). Depois disso, consegui me conectar aos clientes, mas agora há conexão direta. Tenho certeza que perdi o último passo, mas não consigo entender.
iptables -A FORWARD -s 10.0.0.0/16 -d 10.1.0.0/16 -j ACCEPT
no subserver1 não alterou nada.
ATUALIZAÇÃO (3.03.2016)
root@stage:~# iptables -L -nv
Chain INPUT (policy ACCEPT 212K packets, 40M bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
74 5416 ACCEPT all -- tun0 eth0 10.0.0.0/16 10.1.0.0/16 ctstate NEW
Chain OUTPUT (policy ACCEPT 223K packets, 34M bytes)
pkts bytes target prot opt in out source destination
root@stage:~# iptables -t nat -L -nv
Chain PREROUTING (policy ACCEPT 9664 packets, 695K bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 9641 packets, 694K bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 29987 packets, 2269K bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 29828 packets, 2260K bytes)
pkts bytes target prot opt in out source destination
179 11363 MASQUERADE all -- * * 10.0.0.0/16 10.1.0.0/16
Todas as outras máquinas não possuem regras de iptables.
Tags openvpn routing ip-routing