Настройка маршрутизации для сервера 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