19 апр. 2017 г.

RaspberryPi 4G Megafon M100-3 (MFG823) and M150-2 (Huawei e3372h) vlan transparent openvpn tap bridge

Установка raspbian и соединение его с Интернетом.

2. Запускаем raspi-config, включаем ssh и расширяем систему на весь объем карточки.
3. Там же уменьшаем объем, выделенный под видео.
4. Настраиваем 4G модем -  Для MFG823
4.1. Ставим usb-modeswitch  и переключаем модем в режим сетевой карточки.
=================================
#apt-get install usb-modeswitch   
#usb_modeswitch -v 0x19d2 -p 0x1405 -d
=================================


4.2. Подключаем питание от приличного блока питания, от usb-порта вообще не запустилось.
4.3. Через ifconfig убеждаемся, что у нас появился сетевой интерфейс usb0 и мы получили сетевой адрес типа 192.168.0.х.
4.4. При наличии сети 4G индикатор горит зеленым. При установленном соединении он мигает. Нужно через wget дернуть его управлялку для соединения.
=================================
#wget -O /dev/null --quiet http://192.168.0.1/goform/goform_set_cmd_process?goformId=CONNECT_NETWORK
=================================
Убеждаемся, что после выполнения команды модем мигает зеленым - соединение установлено.
(По ссылке -https://wiki.archlinux.org/index.php/ZTE_MF_823_(Megafon_M100-3)_4G_Modem также другие команды этого модема)
4.5. Вставляем в rc.local запуск такого скрипта:
=================================
#!/bin/sh
sleep 15
wget -O /dev/null --quiet http://192.168.0.1/goform/goform_set_cmd_process?goformId=CONNECT_NETWORK
=================================
Sleep нужен, чтобы после подачи питания модем успел очнуться и найти сеть.

5.1.Настраиваем 4G модем -  Для e3372h в режиме stick (по умолчанию для Мегафона)
Информация по модему - 4pda 
Нужно из minicom выдать команду 
at^setport="ff;10,12,16,a2" 
и сделать
at^reset
5.2. Ставим wvdial
=================================
#apt-get install wvdial
=================================
5.3.Правим /etc/wvdial.conf
=================================
[Dialer Defaults]
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0
Init3 = AT+CGDCONT=1,"IP","internet"
Stupid Mode = 1
Modem Type = Analog Modem
Baud = 460800
New PPPD = yes
Modem = /dev/ttyUSB0
ISDN = 0
Phone = *99***1#
Username = { }

Password = { }
=================================
5.4.Правим /etc/network/interfaces для автоматического запуска ppp0
=================================
auto ppp0

iface ppp0 inet wvdial
=================================

Настройка openvpn.
6.1. Ставим его и генерацию ключей.
=================================
#apt-get install openvpn
#apt-get install easy-rsa
=================================
6.2. Ставим утилиты для моста.
=================================
#apt-get install bridge-utils
=================================
6.3. Ставим утилиты для поддержки VLAN
=================================
#apt-get install vlan
#modprobe 8021q
=================================
6.4. Генерируем как обычно ключи.
=================================
- Копируем куда-нибудь из /usr/share/easy-rsa содержимое.
- Правим файл vars.
- Запускаем build-ca, build-dh, build-key-server и по количеству клиентов - build-key.
=================================
- Запускаем openvpn для генерации ключа TLS.
=================================
#openvpn --genkey --secret ./ta.key
=================================
- Из папки keys для сервера берем в /etc/openvpn/keys
=================================
cp ./ca.crt /etc/openvpn/keys
cp ./server.key /etc/openvpn/keys
cp ./server.crt /etc/openvpn/keys
cp ./dh2048.pem /etc/openvpn/keys
cp ./ta.key /etc/openvpn/keys
=================================
- Делаем chmod для *.key чтение только владельцу, для остальных — чтение можно всем.
- Для клиента тот же набор, только вместо server.key и server.crt (ключ и сертификат), client0.key и client1.crt соответственно.

6.5. Включим форвардинг в /etc/sysctl.conf для разрешения маршрутизации (не обязательно).
=================================
net.ipv4.ip_forward=1
=================================
6.6. Выключаем APIPA на интерфейсах, для чего в /etc/dhcpcd.conf, добавляем
=================================
       noipv4ll
=================================

6.7. Конфигурируем сеть. Правим файл /etc/network/interfaces так, чтобы при старте сисетмы автоматически поднимался бридж в прозрачном режиме и туда попадал реальный физический eth0.
=================================
auto eth0
iface eth0 inet manual
    up ifconfig eth0 promisc up
    down ifconfig eth0 promisc down
auto br0
iface br0 inet manual
    bridge_ports eth0
    bridge_stp off
    up ifconfig br0 promisc up
    down ifconfig br0 promisc down
=================================
Проверяем командами ifconfig и  brctl show.
6.8. Делаем, чтобы openvpn запускался при старте системы, выполняем
=================================
update-rc.d openvpn enable
=================================
В каталог /etc/openvpn кладем файл с расширением .conf, например server0.conf
==== /etc/openvpn/server0.conf ========
tls-server
dev  tap0
proto udp
port  30003
ca /etc/openvpn/keys/ca.crt
key /etc/openvpn/keys/mainvpn.key
cert /etc/openvpn/keys/mainvpn.crt
dh /etc/openvpn/keys/dh2048.pem
user nobody
group nogroup
persist-key
persist-tun
log /var/log/openvpn/server0.log
verb 3
mute 20
comp-lzo
tls-auth /etc/openvpn/keys/ta.key 0
script-security 2
up /etc/openvpn/bridge-up
=================================
Для клиента файл конфигурации выглядит следующим образом:
====  /etc/openvpn/client0.conf ========
client
remote 77.88.55.55
dev  tap0
proto udp
port  30003
ca /etc/openvpn/keys/ca.crt
key /etc/openvpn/keys/clientvpn.key
cert /etc/openvpn/keys/clientvpn.crt
dh /etc/openvpn/keys/dh2048.pem
user nobody
group nogroup
persist-key
persist-tun
log /var/log/openvpn/client0.log
verb 3
mute 20
comp-lzo
remote-cert-tls server
tls-auth /etc/openvpn/keys/ta.key 1
script-security 2
up /etc/openvpn/bridge-up
=================================

Для того, чтобы поднявшись, tap0 попадал в нужный бридж, в /etc/openvpn кладем файл, упомянутый в последней строчке конфигурации:

========/etc/openvpn/bridge-up========
#!/bin/bash
ifconfig tap0 up promisc
brctl addif br0 tap0
=================================

Все. Теперь после перезагрузки сам стартанет бридж,
затем поднимется openvpn, присоединится к бриджу.
Остается с двух сторон воткнуть транковые порты каталистов или т.п. свитчей и настроить на них вланы.
Какие именно, распберри все равно, она пропустит все. Как обычный кабель.
Самое главное — сами vlan настраивать не надо.

Дополнение! 

Ситуация, когда нужно пробросить сеть без VLAN описана много где, сам так делал.
Как пробросить транк, я описал здесь.
А если нужно пробросить один VLAN из транка? У меня получилось только так -
На сервере и клиенте.
=/etc/network/interfaces===================
# LAN interface
iface enp1s0 inet static

# VLAN 2351 
auto vlan2351
iface vlan2351 inet manual
    vlan_raw_device enp1s0

# Bridge for VLAN 2351 
auto br0
iface br0 inet manual
    bridge_ports vlan2351
    bridge_stp off
================================

Promisc не нужно нигде, кроме tap0

На том конце на клиенте получается транковый порт, только с одним VLAN.
И каталисту нужно иметь такую конфигурацию:
================================
vlan 2351
!
interface FastEthernet0/1
 description trunk
 switchport trunk allowed vlan 2351
 switchport mode trunk
 no cdp enable
!
interface Vlan2351
 ip address 172.16.0.1 255.255.255.0
 no ip route-cache
!
================================