Все знают, что большая часть экспонатов моего музея могут быть объединены в локальную сеть. И, кстати, для этого уже всё давно готово: свитчи, сервера, кабели... Но выход в интернет я планировал очень давно, затем по понятным причинам отказался от этой идеи (всё хранилось дома... ну и зачем мне всё подключать к интернету, если можно раз в полгода подключать и обновлять системы!). А теперь я поставил и выполнил задачу - настроить 3G шлюз на одном из музейных ПК.
В качестве 3G шлюза (моего маршрутизатора в сети музея) я использовал настольный компьютер Compaq Evo D3D на базе Pentium IV (s423), а в качестве системы, чтобы не отставать и содержать сеть в безопасности - Ubuntu 13.04 Server.
Итак, первым делом, после установки системы, обновляем пакеты. Затем ставим пакеты: minicom, usb_modeswitch, wvdial. Подключаем USB 3G Modem (я использовал Huawei E220, E160E, E1750, E1820), по выдаче lsusb определяем vendor и product, эти значения записываем в /etc/usb_modeswitch.conf. После чего смело запускаем конфигурирование командой usb_modeswitch -c /etc/usb_modeswitch.conf, что позволит для данного сеанса и модема отключить виртуальный привод который мешает работать с самим модемом. Такие переключения будут осуществляться постоянно при старте системы, о чем мы узнаем из лога usb_modeswitch (нужно изменить значение EnableLogging на 1).
Теперь проверим, на каком порту "висит" наш модем - ls /dev |grep ttyUSB (сам порт ttyUSBx появится после работы usb_modeswitch). Проверяем доступность порта командой ls -l /dev/ttyUSB0. Это поможет нам избежать ошибок с usb_modeswitch. Запускаем minicom командой minicom -s и далее действуем методом исключения: добавляем порт ttyUSB0 и даем в терминале команду ATI либо AT. Если видим ответ ОК, просто запоминаем этот порт. Если нет - пробуем следующий: выходим через Ctrl A Z, запускаем заново minicom -s и даем след. порт ttyUSB1. Пробуем пока не достигнем нужного нам результата.
Убедившись, что нашли порт модема, вводим в терминале AT^U2DIAG=0, что отключит навсегда виртуальный привод (нам модем нужен без него, он лишний для нас, в случае чего... да переписать драйвера с офф. сайта или воспользоваться сторонним 3G Manager-ом - я лично поступил так).
Теперь, когда мы отключили привод с драйверами, наш ProductID изменился (был 1001, стал 1003), сконфигурируем wvdial командой wvdialconf. Конфигуратор этот очень хорошо продуман и проверяет все подключенные устройства, затем создает файл конфигурации (если модемов два, создаст конфиг для двух модемов...). Правим наш файл wvdial.conf (/etc/wvdial.conf), добавляя строки:
Stupid Mode = 1 (не задавать много вопросов)
Modem type = USB Modem
Phone = *99# (у меня так)
User = 1 (без этого параметра не работает)
Password = 1
AutoReconnect = on
Baud = 460800 (на этой скорости работает наш USB2.0 модем)
Главное, что нужно не забыть сделать, это... прописать в /etc/sysctl.conf строчку
net.ipv4.ip_forward = 1. Без этого мы в локальной сети не получим интернета!
Теперь создаем скрипт удобного запуска - /etc/init.d/wvdial следующего содержания
#! /bin/sh ### BEGIN INIT INFO # Required-Start: # Required-Stop: # Default-Start: # Default-Stop: # Provides: wvdial # Short-Description: wvdial boot-script # Description: This script establish ppp-connection via wvdial ### END INIT INFO
# PATH should only include /usr/* if it runs after the mountnfs.sh script PATH=/usr/bin DESC="wvdial connection" NAME=wvdial DAEMON=/usr/bin/$NAME DAEMON_ARGS="--options args" PIDFILE=/var/run/$NAME.pid SCRIPTNAME=/etc/init.d/$NAME
# Exit if the package is not installed [ -x "$DAEMON" ] || exit 0
case "$1" in start) /usr/bin/wvdial > /dev/null 2>&1 & ;; stop) killall wvdial killall pppd ;; *) echo "Usage: $SCRIPTNAME {start|stop}" >&2 exit 3 ;; esac :
и задаём права на запуск файла - chmod +x wvdial
Добавляем файл в автозапуск - update.rc.d wvdial defaults
Теперь нам необходимо изменить файлы настроек сети для работы компьютера в качестве шлюза:
/etc/network/interfaces #эти строчки просто комментируем #auto eth0 #iface eth0 inet dhcp
а в /etc/ppp/ip-up добавляем в конец файла строчки
ifconfig eth0 up 10.0.0.254 netmask 255.255.255.0
Внимание! В этом файле желательно прописать и правила iptables типа
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
И не забыть остальные правила (наверняка необходим будет доступ по ssh на рутер).
В файле /etc/ppp/ip-down добавляем строчку ifconfig eth0 down
Когда поднимается PPP-соединение, pppd запускает скрипт /etc/ppp/ip-up, а когда соединение разрывается - то /etc/ppp/ip-down. ВАЖНО: есть две директории: /etc/ppp/ip-up.d/ и /etc/ppp/ip-down.d/ если в эти директории положить скрипты, то они будут выполнятся в момент создания и разрыва PPP-соединения. Например, скрипт в /etc/ppp/ip-up.d/: #! /bin/sh # # меняем шлюз route del default route add default ppp0 # делаем маскарадинг /sbin/iptables -P FORWARD ACCEPT /sbin/iptables –table nat -A POSTROUTING -o ppp0 -j MASQUERADE echo 1 > /proc/sys/net/ipv4/ip_forward # без этого интернет не раздается вообще!
Так же можно туда положить скрипты запуска OpenVPN или Slonax.
А в /etc/ppp/ip-down.d/ , например, можно положить скрипт чтобы при отключении ppp маршрутизация возвращалась на eth0:
#! /bin/sh # route del default route add default eth0
Вместо wvdial можно использовать sakis3g-универсальный скрипт "всё-в-одном". Для него не нужно никаких настроек usb_modeswitch, который частенько теряет модем на старте системы. Он также ведёт логи и читает файл конфигурации (для запуска с системой). У этого скрипта даже есть меню.
|