Configuração de roteamento para o servidor OpenVPN no Amazon EC2

5

Desenvolvedor de software aqui, tentando colocar seu sysadmin-foo em funcionamento configurando um servidor OpenVPN no amazon EC2 para acessar todos os recursos internos. Aqui está como eu imagino que em um novo Ubuntu 12.04 Canonical AMI:

   Local network          /        EC2 Cloud, 10.*.*.*/255.0.0.0
  172.16.20.*/          ,'
     255.255.255.0     ,'                +-----------------+
                      .'                 |Amazon DNS server|
                      |                ,'|  172.16.0.23    |
 +---------------+   |               ,'  +-----------------+
 | Workstation   |   |             ,'
 |               XXX |   +-------,'------+
 | 172.16.20.1   |  XXXX | OpenVPN server|
 +------'.-------+   \  XX  10.23.45.67  '-.  +-------------+
          \          '.  +---------------+  '-. Second server
  +--------'.---+     |                       | 10.23.45.68 |
  |Local server |      \                      +-------------+
  | 172.16.20.2 |       \
  +-------------+        \

Os clientes podem se conectar à VPN (mesmo no iPhone), mas estou tendo problemas para obter uma visão geral completa dos subsistemas que preciso verificar.

Aqui estão meus objetivos para a configuração:

  • Clientes VPN devem poder acessar recursos internos via VPN, o restante da Internet deve ser roteado através do gateway local
  • Os clientes VPN devem poder acessar todos os servidores que o servidor OpenVPN pode acessar
  • Os clientes VPN devem usar o servidor DNS da Amazon em 172.16.0.23 como seu servidor dns principal, porque esse servidor resolve os nomes de host gerados da Amazon para endereços IP internos (ou seja, ec2-45-67-8-9.eu-west-1.compute.amazonaws.com resolveria 10.23.45.67 quando resolvido por esse servidor, mas para 45.67.8.9 em qualquer outro lugar)
  • Os clientes VPN devem se ver

Veja como eu configurei /etc/openvpn/server.conf (apenas os bits interessantes, espero):

persist-tun
server 172.16.10.0 255.255.255.0
push "route-gateway 172.16.10.1"
push "route 10.0.0.0 255.0.0.0"

push "route 172.16.0.23"
push "dhcp-option DNS 172.16.0.23"

No entanto, não sei quais partes do servidor openvpn fazem por mim:

  • Preciso configurar o iptables no servidor? Se sim, como?
  • Preciso definir rotas no servidor (além das que estão sendo enviadas ao cliente)? Se sim, qual e como?
  • Que outro software de rede estou faltando que faz com que meus clientes não se conectem com sucesso?
por peritus 07.03.2013 / 10:47

1 resposta

3

Você precisa ativar o encaminhamento no servidor OpenVPN no kernel ( /proc/sys/net/ipv4/ip_forward ) e você precisa permitir o encaminhamento global ou seletivamente no firewall (iptables), por exemplo:

# there is probably already a rule allowing all established connections
# iptables -A FORWARD -m conntrack --ctstate ESTABLISHED -j ACCEPT
# the next rules for every OpenVPN interface (or once for the respective address block)
iptables -A FORWARD -i tun0 -d 10.0.0.0/8  -j ACCEPT
iptables -A FORWARD -i tun0 -d 172.16.0.23 -j ACCEPT
# if the local network shall be accessible
# iptables -A FORWARD -i tun0 -d 172.16.20.0/24 -j ACCEPT

Você não precisa definir rotas no servidor se apenas clientes simples se conectarem. Se 172.16.20.1 se conecta como um gateway para a rede local, então você precisa de uma rota para 172.16.20.0/24, mas isso é provavelmente (e melhor) definido na configuração do OpenVPN para 172.16.20.1.

Editar 1

Se você não puder configurar o roteamento em determinados sistemas e seu roteamento não enviar o tráfego de volta corretamente, será necessário NAT (mais preciso: SNAT):

iptables -t nat -A POSTROUTING -d $PROBLEM_HOST_IP \! -s $LOCAL_IP \
  -j SNAT --to-source $LOCAL_IP

com as variáveis definidas de acordo. Supondo que você só pode definir o roteamento correto para destinos em 172.16.20.0/24, você pode fazer isso mais facilmente desta maneira:

iptables -t nat -I POSTROUTING 1 -s $LOCAL_IP -j ACCEPT
iptables -t nat -I POSTROUTING 2 -d 172.16.20.0/24 -j ACCEPT
iptables -t nat -I POSTROUTING 3 -j SNAT --to-source $LOCAL_IP
    
por 27.04.2013 / 22:42