Главная
Главная Руководства Raspberry Pi › Beeline. Raspbian Jessie в качестве роутера.



Автор:

Статья опубликована: 2016-02-28 23:08:00
Последние правки: 2018-03-11 20:27:21

Делаем из Raspbian Jessie роутер для доступа в интернет.
Подключаемся к Beeline.


  • Ложка дёгтя
    Использовать сервер для раздачи билайновского интернета дома у меня не получилось. С сервера интернет работал как часы, но у клиентов через NAT глючило и весьма странным образом. Пинги, трассировка проходили, но сайты открывались не все. Яндекс, Гугль - ок, но тот же hh.ru не открывался (тайм-аут). Техподдержка билайна доказывала мне, что проблема в настройках моего сервера так как если напрямую подключить комп с виндой, то все сайты работают (это так, я пробовал).
    После безуспешной борьбы с билайновцами, в качестве эксперимента подключился к ростелекому, тот же сервер, поднял VPN - все сайты, что не открывались через билайн, тут открываются.
    Выводы делайте сами, но у меня теперь новый провайдер.


  • Софт
    Необходимо установить пакеты dnsutils и xl2tpd. Как вы их будете устанавливать - без разницы, я выпустил Raspberry Pi в инет через сервер, который подключен к другому провайдеру.
    # apt-get install dnsutils
    # apt-get install xl2tpd
    

  • ip-адреса
    eth0 - сетевой интерфейс на плате, статический ip, смотрит в локальную сеть
    eth1 - D-Link DUB-E100, usb, динамический ip, смотрит в сеть провайдера

    /etc/network/interfaces
    allow-hotplug eth0
    iface eth0 manual
    
    /etc/dhcpcd.conf - файлик в системе есть, пишем в начало
    interface eth0
    static ip_address=192.168.1.6/24
    nogateway # не дает записать default route интерфейса в таблицу маршрутизации
    nohook resolv.conf # не дает записать dns интерфейса в /etc/resolv.conf
    
    interface eth1
    
    Перезагружаемся, проверяем:
    # ifconfig
    eth0      Link encap:Ethernet  HWaddr b8:27:eb:80:ab:fc  
              inet addr:192.168.1.6  Bcast:192.168.1.255  Mask:255.255.255.0
              inet6 addr: fe80::ba27:ebff:fe80:abfc/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:354 errors:0 dropped:0 overruns:0 frame:0
              TX packets:329 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:31484 (30.7 KiB)  TX bytes:88404 (86.3 KiB)
    
    eth1      Link encap:Ethernet  HWaddr 90:8d:78:04:36:e6  
              inet addr:10.63.224.155  Bcast:255.255.255.255  Mask:255.255.248.0
              inet6 addr: fe80::3f17:ad6e:828e:72c9/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:1514 errors:0 dropped:0 overruns:0 frame:0
              TX packets:392 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:141272 (137.9 KiB)  TX bytes:112557 (109.9 KiB)
    
    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0
              inet6 addr: ::1/128 Scope:Host
              UP LOOPBACK RUNNING  MTU:65536  Metric:1
              RX packets:148 errors:0 dropped:0 overruns:0 frame:0
              TX packets:148 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0 
              RX bytes:12792 (12.4 KiB)  TX bytes:12792 (12.4 KiB)
    
    Смотрим таблицу маршрутизации, маршрут по умолчанию должен смотреть в сеть провайдера
    # route
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    default         10.63.224.1     0.0.0.0         UG    203    0        0 eth1
    10.63.224.0     *               255.255.248.0   U     203    0        0 eth1
    192.168.1.0     *               255.255.255.0   U     202    0        0 eth0
    
    Смотрим dns-сервера
    # cat /etc/resolv.conf
    # Generated by resolvconf
    domain beeline
    nameserver 213.234.192.8
    nameserver 85.21.192.3
    
    Делаем трассировку до dns-серверов, трассировка должна идти через eth1
    # traceroute 213.234.192.8
    traceroute to 213.234.192.8 (213.234.192.8), 30 hops max, 60 byte packets
     1  10.63.224.1 (10.63.224.1)  2.080 ms  2.379 ms  3.020 ms
    [SKIPPED]
    10  nlb1.beeline.ru (85.21.192.11)  11.898 ms  11.781 ms  11.731 ms
    root@raspberrypi:/etc# traceroute 85.21.192.3
    traceroute to 85.21.192.3 (85.21.192.3), 30 hops max, 60 byte packets
     1  10.63.224.1 (10.63.224.1)  1.737 ms  2.415 ms  2.949 ms
    [SKIPPED]
    12  nlb1.beeline.ru (85.21.192.11)  11.822 ms 8m-iptv-bb-vl23.corbina.net (85.21.226.75)  13.462 ms  13.675 ms
    
    Резолвим ip-адреса vpn-серверов
    # host tp.internet.beeline.ru
    tp.internet.beeline.ru has address 89.179.75.238
    tp.internet.beeline.ru has address 89.179.75.205
    
    Пингуем:
    # ping 89.179.75.238
    PING 89.179.75.238 (89.179.75.238) 56(84) bytes of data.
    64 bytes from 89.179.75.238: icmp_seq=1 ttl=252 time=0.575 ms
    64 bytes from 89.179.75.238: icmp_seq=2 ttl=252 time=0.424 ms
    64 bytes from 89.179.75.238: icmp_seq=3 ttl=252 time=0.539 ms
    64 bytes from 89.179.75.238: icmp_seq=4 ttl=252 time=0.403 ms
    ^C
    --- 89.179.75.238 ping statistics ---
    4 packets transmitted, 4 received, 0% packet loss, time 2999ms
    rtt min/avg/max/mdev = 0.403/0.485/0.575/0.074 ms
    # ping 89.179.75.205
    PING 89.179.75.205 (89.179.75.205) 56(84) bytes of data.
    64 bytes from 89.179.75.205: icmp_seq=1 ttl=251 time=0.778 ms
    64 bytes from 89.179.75.205: icmp_seq=2 ttl=251 time=0.618 ms
    64 bytes from 89.179.75.205: icmp_seq=3 ttl=251 time=0.514 ms
    64 bytes from 89.179.75.205: icmp_seq=4 ttl=251 time=0.513 ms
    ^C
    --- 89.179.75.205 ping statistics ---
    4 packets transmitted, 4 received, 0% packet loss, time 2999ms
    rtt min/avg/max/mdev = 0.513/0.605/0.778/0.112 ms
    

  • iptable
    Сразу же врубаем брандмауер, записываем правила в /etc/rc.local
    # по умолчанию для всего запрет
    iptables -P INPUT DROP
    iptables -P OUTPUT DROP
    iptables -P FORWARD DROP
    
    # разрешаем loopback
    iptables -A INPUT -i lo -j ACCEPT
    iptables -A OUTPUT -o lo -j ACCEPT
    
    # разрешаем lan
    iptables -A INPUT -i eth0 -j ACCEPT
    iptables -A OUTPUT -o eth0 -j ACCEPT
    
    # разрешаем исходящие на провайдера
    # нужно для соединения с vpn провайдера
    iptables -A OUTPUT -o eth1 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
    
    # разрешаем уже установленные соединения
    iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    

  • Настраиваем маршрутизацию
    /etc/sysctl.conf, разрешаем маршрутизацию пакетов:
    net.ipv4.ip_forward=1
    net.ipv6.conf.all.forwarding=1
    
  • Настраиваем xl2tpd
    /etc/xl2tpd/xl2tpd.conf
    [global]
    access control = yes
    auth file = /etc/ppp/chap-secrets
    [lac beeline]
    lns = tp.internet.beeline.ru
    redial = yes
    redial timeout = 5
    require chap = yes
    require authentication = no
    name = <логин_beeline>
    ppp debug = no
    pppoptfile = /etc/ppp/peers/options.xl2tpd
    require pap = no
    autodial = yes
    tx bps = 1000000000
    
    /etc/ppp/peers/options.xl2tpd
    lcp-echo-interval 10
    lcp-echo-failure 2
    name <логин_beeline>
    remotename l2tp
    ipparam corbina
    connect /bin/true
    mtu 1460
    nodeflate
    nobsdcomp
    persist
    maxfail 0
    nopcomp
    noaccomp
    noauth
    noproxyarp
    
    /etc/ppp/chap-secrets
    # Secrets for authentication using CHAP
    # client server secret IP addresses
    <логин_beeline> * <пароль_beeline>
    
    <логин_beeline>, <пароль_beeline> - это ваши логин и пароль для подключения (без угловых скобок, конечно)

    /etc/ppp/options
    lcp-echo-failure 10
    lcp-echo-adaptive
    lcp-echo-interval 60
    
    Пишем скрипты для смены маршрутов
    - при поднятии ppp-интерфейса, файл /etc/ppp/ip-up.d/0010beeline-up
    #!/bin/sh
    
    GW="10.63.224.1"
    #GW=`cat /var/lib/dhcp/dhclient.eth0.leases | grep 'option routers' | tail -1 | awk '{print $3}' | sed 's/;//'`
    /sbin/route del $5 dev $1
    /sbin/route add -host $5 gw $GW
    /sbin/route add -net 10.63.0.0 netmask 255.255.0.0 gw $GW
    for i in $(grep "^nameserver" /etc/resolv.conf | awk '{print $2}'); do
     /sbin/route add -host $i gw $GW
    done
    /sbin/route del default
    /sbin/route add default dev $1
    
    Здесь мы:
    - узнаем маршрут по умолчанию (GW) из файла dhcpd нашего интерфейса (/var/lib/dhcp/dhclient.eth0.leases) На данный момент вытащить инфу нет возможности, потому пишем маршрут руками
    - удаляем маршрут до vpn-сервера через его же vpn-туннель (в Windows такой маршрут не вызывает никаких проблем, но то в Windows, а в unix получается петля и ничего не работает)
    - добавляем маршрут до vpn-сервера через eth1
    - добавляем маршрут на билайновскую сеть 10.63.0.0 через eth1 (этот момент нужно будет периодически проверять, чтобы сеть вдруг не изменилась)
    - добавляем маршрут на dns-сервера через eth1
    - удаляем маршрут по умолчанию
    - задаем адрес vpn-сервера в качестве маршрута по умолчанию

    - при выключении ppp-интерфейса, файл /etc/ppp/ip-down.d/0010beeline-down
    #!/bin/sh
    
    GW="10.63.224.1"
    #GW=`cat /var/lib/dhcp/dhclient.eth0.leases | grep 'option routers' | tail -1 | awk '{print $3}' | sed 's/;//'`
    /sbin/route del default
    /sbin/route add default gw $GW
    
    как видите, ничего сложного:
    - снова находим адрес маршрута по умолчанию из dhcp
    - удаляем маршрут по умолчанию (он сейчас ведет на vpn-сервер)
    - добавляем маршрут по умолчанию на eth1


  • Запускаем
    Добавляем xl2tpd в автозагрузку:
    # systemctl enable xl2tpd
    
    Запускаем:
    # service xl2tpd start
    
    Посмотреть статус сервиса:
    ~# systemctl status xl2tpd.service
    
    или же в файле /var/log/syslog

    Если все подключение прошло удачно, то у вас появится новый сетевой интерфейс
    ppp0      Link encap:Point-to-Point Protocol  
              inet addr:XXX.XXX.XXX.XXX  P-t-P:XXX.XXX.XXX.XXX  Mask:255.255.255.255
              UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1460  Metric:1
              RX packets:4548 errors:0 dropped:0 overruns:0 frame:0
              TX packets:3109 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:3 
              RX bytes:5925964 (5.6 MiB)  TX bytes:234571 (229.0 KiB)
    

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