Здесь разработчик программного обеспечения, пытающийся запустить свой sysadmin-foo, настроив сервер OpenVPN на amazon EC2 для доступа ко всем внутренним ресурсам. Вот как я это представляю на свежем каноническом AMI Ubuntu 12.04:
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), но мне сложно получить полное представление о том, какие подсистемы мне нужно проверить.
Вот мои цели по настройке:
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
где-либо еще)Вот как я настроил /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 выполняет для меня:
Вам необходимо включить пересылку на сервере 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