Настройка маршрутизации для сервера OpenVPN на Amazon EC2

Разработчик программного обеспечения пытается установить и запустить свой системный сервер, настроив сервер OpenVPN на Amazon EC2 для доступа ко всем внутренним ресурсам. Вот как я представляю это на свежем 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 |       \
  +-------------+        \

Клиенты могут подключаться к VPN (даже на iPhone), но у меня возникают проблемы с полным обзором подсистем, которые мне нужно проверить.

Вот мои цели для установки:

  • Клиенты VPN должны иметь доступ к внутренним ресурсам через VPN, остальная часть интернета должна маршрутизироваться через локальный шлюз
  • Клиенты VPN должны иметь доступ ко всем серверам, к которым сервер OpenVPN может получить доступ
  • VPN-клиенты должны использовать DNS-сервер Amazon на 172.16.0.23 в качестве основного DNS-сервера, поскольку этот сервер разрешает сгенерированные имена хостов Amazon во внутренние IP-адреса (т.е. ec2-45-67-8-9.eu-west-1.compute.amazonaws.com решил бы 10.23.45.67 при разрешении этим сервером, но 45.67.8.9 где-либо еще)
  • VPN-клиенты должны видеть друг друга

Вот как я настроил /etc/openvpn/server.conf (Надеюсь, только интересные фрагменты):

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"

Тем не менее, я не уверен, какие части из них сервер openvpn делает для меня:

  • Нужно ли настраивать iptables на сервере? Если так, то как?
  • Нужно ли устанавливать маршруты на сервере (кроме тех, которые отправляются клиенту)? Если да, то как и как?
  • Какое другое сетевое программное обеспечение мне не хватает, из-за которого мои клиенты не могут подключиться успешно?

1 ответ

Решение

Вам нужно включить пересылку на сервер OpenVPN в ядре (/proc/sys/net/ipv4/ip_forward) и вам необходимо глобально или выборочно разрешить пересылку в брандмауэре (iptables), например:

# 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

Вам не нужно устанавливать маршруты на сервере, если подключаются только простые клиенты. Если 172.16.20.1 подключается как шлюз для локальной сети, то вам нужен маршрут для 172.16.20.0/24, но он, вероятно (и лучше всего), установлен в конфигурации OpenVPN для 172.16.20.1.

Редактировать 1

Если вы не можете настроить маршрутизацию на определенных системах, и их маршрутизация не будет отправлять трафик обратно в правильном направлении, тогда вам нужен NAT (точнее: SNAT):

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

с переменными, установленными соответственно. Предполагая, что вы можете установить правильную маршрутизацию для целей в 172.16.20.0/24 только тогда, вы можете сделать это проще следующим образом:

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
Другие вопросы по тегам