Итак, есть роутер1 (сеть 192.168.0.0/24, динамический внешний ip), к этому роутеру подключен комп (с openvpn клиентом для проверки просто) и телефон1 Yealink T21P с последней прошивкой. Компу выдается ip 192.168.0.86, телефону1 192.168.0.82.
Есть роутер2 (сеть 192.168.0.0/24, статический внешний ip 31.200.XXX.XXX). К этому ротеру подключен сервер (CentOS 6 с астериском + FreePBX 13 и vpn сервер openvpn) и телефон2 такой же Yealink T21P. Серверу присваивается ip 192.168.0.46, телефону просто динамический 192.168.0.99.
На сервере поднят vpn сервер с интерфейсом tap1 и сетью 192.168.2.0/24, сам сервер выступает в качестве шлюза впн и имеет ip 192.168.2.254. К vpn-у клиенты подключаются по 1200 порту udp, на роутере2 проброшен 1200 порт до сервера.
mode server
tls-server
proto udp
dev tap1
port 1200
daemon
tls-auth /etc/openvpn/keys/ta.key 0
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key
dh /etc/openvpn/keys/dh.pem
push "route 192.168.0.0 255.255.255.0"
ifconfig 192.168.2.254 255.255.255.0
ifconfig-pool 192.168.2.1 192.168.2.200
route 192.168.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
verb 3
cipher AES-128-CBC
auth SHA1
persist-key
log ovpn.log
comp-lzo yes
keepalive 20 70
duplicate-cn
client-to-client
status /var/log/ovpn-status.log
телефон2 не поднимает туннель, а соединяется просто напрямую до 192.168.0.46 и в принципе все успешно, звонки в обе стороны.
Телефон1 поднимает туннель, в качестве адреса впн - внешний ip роутера2, т.е. 31.200.ХХХ.ХХХ, порт 1200 udp. Полный конфиг клиента vpn:
client
setenv SERVER_POLL_TIMEOUT 4
nobind
remote 31.200.XXX.XXX
port 1200
proto udp
cipher AES-128-CBC
auth SHA1
dev tap1
remote-cert-tls server
comp-lzo yes
verb 6
tls-client
tls-auth /yealink/config/openvpn/keys/ta.key 1
ca /yealink/config/openvpn/keys/ca.crt
cert /yealink/config/openvpn/keys/client.crt
key /yealink/config/openvpn/keys/client.key
dh /yealink/config/openvpn/keys/dh.pem
Теперь сама проблема. телефон1 поднимает впн, получает ip из пула 192.168.2.1-192.168.2.200, к примеру 192.168.2.1 до до регистрации не доходит. В веб-морде телефона пишу адрес сервера астериска 192.168.2.254, порт 5060.
Пинг от сервера до телефона1 (до ip 192.168.2.1) идет, от телефона1 до сервера нет возможности проверить, но полагаю, что тоже идет, т.к. с компа до сервера впн поднимается, компу присваивается ip 192.168.2.2 и пинг с компа до сервера (т.е. до ip 192.168.2.254) идет.
Скорее всего, ужно прописать в iptables хождение маршрутов. Я не силен в этом, т.к. программист по профессии, но, прочитав мануал по iptables, прописал следующее:
-A PREROUTING -d 192.168.2.0/24 -p udp -j DNAT --to-destination 192.168.2.254
-A POSTROUTING -s 192.168.2.0/24 -j MASQUERADE
-A FORWARD -p udp --dport 1200 -d 192.168.0.46 -j ACCEPT
Это точно не правильно, я перепробовал кучу вариантов, находил 5 или 6 различных мануалов по настройке, но что-то я делаю не так, а додумать не могу.
Как мне сконнектить телефоны, которые удаленные и поднимают впн с астериском? Очень сильно прошу помочь. Не первую неделю бьюсь уже. Заранее спасибо всем!