Назад | Перейти на главную страницу

Сделать Asterisk обслуживать другую подсеть

У меня есть сервер с Linux Ubuntu 12.04. Он имеет две подсети - 192.168.0.1 (eth0) и 192.168.1.1 (eth1).

Есть Сервер Asterisk (IP PBX) подключена к первой подсети, допустим, у нее есть IP-адрес 192.168.0.28.

Мне понадобится SIP клиенты из 192.168.1.x подсеть сможет подключиться к этому серверу Astersik.

Моя идея - сделать все SIP-клиенты для подключения сервер шлюза (тот, что находится в обеих подсетях, т.е. 192.168.1.1 своей подсети) и сделать это порт переадресовывает все UDP 5060 связи с 192.168.0.28 (IP BPX).

Вот моя идея:

echo "1" > /proc/sys/net/ipv4/ip_forward

iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth1 -d 192.168.0.28 -p udp --dport 5060 -m state \
    --state NEW -j ACCEPT
iptables -t nat -A PREROUTING -i eth1 -p udp --dport 5060 -j DNAT \
    --to-destination 192.168.0.28
iptables -t nat -A POSTROUTING -p tcp --dport 5060 -d 192.168.0.28 \
    -o eth0 -j MASQUERADE

Но SIP-клиенты (софтфоны) из 192.168.1.x не могут зарегистрироваться. Я попытался перенаправить HTTP-порт, чтобы проверить его:

iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth1 -d 192.168.0.28 -p tcp --dport 80 -m state \
    --state NEW -j ACCEPT
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT \
    --to-destination 192.168.0.28:80
iptables -t nat -A POSTROUTING -p tcp --dport 80 -d 192.168.0.28 \
    -o eth0 -j MASQUERADE

и это работает нормально, но с первым из них с пересылкой UDP я не могу заставить клиентов регистрироваться на сервере Asterisk.

UPD:

Как предложено в общины Мне нужно было бы использовать route вместо того iptables поэтому я предполагаю, что команда будет примерно такой:

route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.0.28 dev eth0

Но это не сработало. Кроме того, я не хочу открывать весь IP-узел АТС для сети 192.168.1.x, только порт 5060 для SIP-клиентов (программных телефонов).

Зачем использовать NAT? В этом сценарии вы можете напрямую маршрутизировать между двумя локальными сетями, вообще без переадресации портов.

В любом случае, если ты действительно хотите использовать NAT, порта 5060 должно хватить если ваши клиенты - стандартные SIP. Если это клиенты со смешанным / настраиваемым протоколом (например, реализация Cisco H323 и / или SCTP / SCCP), вам потребуется открыть дополнительные диапазоны портов.

РЕДАКТИРОВАТЬ: добавленный вами маршрут неверен. Позвольте мне проиллюстрировать настройку вашей сети:

    LAN 192.168.0.x/24              LAN 192.168.1.x/24
     ----------------                ----------------
     |  |  |  |  |  |                |  |  |  |  |  |
     |              |                |              |
     |              |                |              |
    PBX             |  UBUNTU SERVER |          SIP CLIENT
192.168.0.28   192.168.0.1      192.168.1.1  eg: 192.168.1.10
                    |                |
                    |________________|

Согласно вашему описанию, сервер Ubuntu является многосетевым хостом - у него есть один интерфейс в LAN 192.168.0.x и другой интерфейс в LAN 192.168.1.x. Для маршрутизации между сетями вам необходимо объявить клиентам что машина Ubuntu служит шлюз для другой LAN. Предполагая, что все задействованные машины являются клиентами Linux, вам необходимо:

  • на каждой машине 192.168.0.x, которую вы выпускаете route add -net 192.168.1.0/24 gw 192.168.0.1
  • на каждой машине 192.168.1.x, которую вы выпускаете route add -net 192.168.0.x/24 gw 192.168.1.1
  • на сервере Ubuntu вы можете настроить правила брандмауэра только для пересылки / маршрутизации пакетов для выдачи 192.168.0.28 iptables -A FORWARD -d 192.168.0.28 -j ACCEPT и iptables -A FORWARD -s 192.168.0.28 -j ACCEPT

Обратите внимание, что шаги, описанные выше, предназначены только для иллюстрации и не передовой опыт: например, вместо того, чтобы вводить конкретную команду маршрутизации внутри каждого клиента, вы можете (и должны) вставлять правильные маршруты в соответствующие шлюзы локальной сети.

Однако это сетевое взаимодействие на самом базовом уровне - если вы спрашиваете об этом, вы действительно нужно задокументировать, что такое маршрутизация / NAT и как их эффективно использовать.