Dual Access


Настройка роутера с DD-WRT в режиме Dual Access PPoE, если провайдер для своей локальной сети использует DHCP, а подключение к интернету с использованием PPPoE.    
Все описанное ниже подразумевает, что пользователь умеет пользоваться программным обеспечением (TELNET), ПК настроен на локальную сеть устройства (роутер). Роутер имеет адрес 192.168.130.1 маска 255.255.255.0. 

 


     При данной настройки получаем поднятый сетевой интерфейс с IP адресом на WAN порт устройства (полученный с помощью DHCP), тем самым получая доступ к ресурсам локальной сети провайдера. Какие есть сетевые интерфейсы на устройстве и какую мнемонику они имеют. Подключимся с помощью TELNET на устройство с именем "root" пароль как для доступа к WEB и наберем команду ниже для просмотра сетевых интерфейсов:
 
 root@My-Fan:~# ifconfig
 br0       Link encap:Ethernet  HWaddr 00:0C:43:х:х:77 
          inet addr:192.168.130.1  Bcast:192.168.130.255  Mask:255.255.255.0
         
 eth2      Link encap:Ethernet  HWaddr 00:0C:43:х:х:77 
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         
 ra0       Link encap:Ethernet  HWaddr 00:0C:43:х:х:88 
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
               
 vlan1     Link encap:Ethernet  HWaddr 00:0C:43:х:х:77 
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

 vlan2     Link encap:Ethernet  HWaddr y:y:y:y:y:y 
          inet addr:10.х.х.х  Bcast:10.х.х.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1460  Metric:1
 root@My-Fan:~# 
Где имена сетевых интерфейсов :
- br0  мост объединяющий локальную сеть устройства (vlan1) и его wi-fi (ra0)
- eth2 общий сетевой интерфейс
- ra0  wi-fi
- vlan1  порты LAN1-LAN4
- vlan2  порт WAN

192.168.130.1 IP адрес устройства, согласно его настройки прописанные в Router IP, с маской 255.255.255.0 установленный в разделе "Setup" - "Basic Setup" - окно "Network Setup", адрес 192.168.130.100 IP адрес локального шлюза, который находиться в локальной сети устройства и ни какого отношения к текущему провайдеру не имеет. Обращаю внимание, что имена сетевых интерфейсов зависят от того на каком чипе данный роутер изготовлен. Данная мнемоника относится к роутерам на базе Ralink.

Запущенный сервис "udhcpc" отвечает за то, чтоб сетевом интерфейсе на "vlan2" был получен IP от провайдера по DHCP. 

 root@My-Fan:~# ps | grep udhcpc
 2605 root       796 S    udhcpc -i vlan2 -p /var/run/udhcpc.pid -s /tmp/udhcpc -H My-Fan
 root@My-Fan:~#

Маршрут по умолчанию в данном случае имеем на шлюз провайдера, строка 
default   10.x.x.1  0.0.0.0  UG  0  0  0  vlan2 

 root@My-Fan:~# route
 Kernel IP routing table
 Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
 default             10.х.х.1              0.0.0.0               UG      0        0        0  vlan2
 10.х.х.0                      *               255.255.255.0   U        0        0        0  vlan2
 127.0.0.0                   *               255.0.0.0            U        0        0        0  lo
 192.168.130.0           *               255.255.255.0    U        0        0        0  br0
 root@My-Fan:~#


Второй этап, поднятие соединения "PPPoE" для доступа в интернет через нашего провайдера, который будет настрачивать так сказать ручным способом нам необходим файл конфигурации "options.pppoe", который будет использоваться запущенным сервисом pppd командой "pppd file /tmp/ppp/options.pppoe" используем для этого режим настройки через WEB интерфейс нашего устройства введя адрес 192.168.130.1/Diagnostics.asp попав на нужную нам страницу введем текст который ниже в "Command Shell" и нажав потом кнопку "Save Startup":

mkdir /tmp/ppp
echo -e "plugin /usr/lib/rp-pppoe.so
nic-vlan2
noccp
nomppc
noipdefault
noauth
defaultroute
noaccomp
nobsdcomp
nodeflate
nopcomp
nomppe
usepeerdns
user 'user'
password 'password'
default-asyncmap
mtu 1492
mru 1492
persist
lcp-echo-interval 3
lcp-echo-failure 20
">/tmp/ppp/options.pppoe
pppd file /tmp/ppp/options.pppoe &

Где требуют пояснения некоторые строчки 
nic-vlan2 - vlan2 это WAN порт на данном устройстве, может иметь другую мнемонику;
user 'user' - имя пользователя;
password 'password' - пароль пользователя;
">/tmp/ppp/options.pppoe - запись в файл options.pppoe; 

Для записи "Startup" скрипта - скрипт "автозапуска" на устройстве воспользоваться кнопкой с надписью “Save Startup”. Данный скрипт будет отработан всегда при перезагрузке устройства, как раз удобен нам для ввода некоторых изменений. В результате должны получить окно которое имеет следующий вид.




Теперь перезапустим устройство, в результате проделанной работы через некоторое время должны будем получить поднятый сетевой интерфейс с именем "ppp0" для работы с интернет. Для проверки наших утверждений воспользуемся следующими командами "ifconfig" и "ps":
 root@My-Fan:~# ifconfig
 br0       Link encap:Ethernet  HWaddr 00:0C:43:х:х:77 
          inet addr:192.168.130.1  Bcast:192.168.130.255  Mask:255.255.255.0
         
 eth2      Link encap:Ethernet  HWaddr 00:0C:43:х:х:77 
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         
 ppp0      Link encap:Point-to-Point Protocol 
          inet addr:31.х.х.4  P-t-P:84.х.х.5  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1460  Metric:1

 ra0       Link encap:Ethernet  HWaddr 00:0C:43:х:х:88 
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
               
 vlan1     Link encap:Ethernet  HWaddr 00:0C:43:х:х:77 
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

 vlan2     Link encap:Ethernet  HWaddr y:y:y:y:y:y 
          inet addr:10.х.х.х  Bcast:10.х.х.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1460  Metric:1
 root@My-Fan:~# ps | grep pppd
 2943 root      1604 S    pppd file /tmp/ppp/options.pppoe
 root@My-Fan:~#

Если этого не получилось то возможно где-то допущена ошибка, еще раз проверить и повторить. Данная запись c ppp0 говорит нам, что данный сетевой интерфейс имеет IP адрес 31.х.х.4 и следующий за ним запись P-t-P:84.x.x.5 говорит нам об IP адресе шлюза. 

Третье. Так как данная настройка для PPPoE соединения с провайдером для выхода в интернет происходит в ручную, то нам необходимо добавить запись c использованием команды iptables :

iptables -t nat -A POSTROUTING -s 192.168.130.0/24 -o ppp0 -j SNAT --to-source [полученный_IP_адрес]

где в поле [полученный_IP_адрес] поставим нужный нам адрес, который мы видели ранее через "ifconfig -  inet addr:31.х.х.4 , а именно 31.х.х.4 (в место "x" должны стоять цифры, например 31.31.131.4)

  ppp0      Link encap:Point-to-Point Protocol 
          inet addr:31.х.х.4  P-t-P:84.х.х.5  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1460  Metric:1
 
Проверяем ввод команды "iptables" и полученную строчку :

 root@My-Fan:~# iptables –t nat -nvL
 Chain POSTROUTING (policy ACCEPT 111 packets, 10277 bytes)
 pkts bytes target     prot opt in     out     source               destination        
 …
    0     0 SNAT       0    --  *      ppp0    192.168.130.0/24     0.0.0.0/0           to:31.28.195.24
 …
root@My-Fan:~#

   
Последний штрих - это проверка маршрута по умолчанию, который должен указывать на нужный нам шлюз, в данном случае полученный при подключении "PPPoE" и указанный в интерфейсе "ppp0" . Проверим что у нас получилось на данном этапе с маршрутами по умолчанию, а именно то, что defaultуказывает на шлюз локальной сети провайдера "gateway - 10.х.х.1", а нам необходимо на gateway - 84.х.х.5 , удалим текущий и создадим новый используя команду "route":


 root@My-Fan:~# route –n
 Kernel IP routing table
 Destination     Gateway         Genmask           Flags Metric Ref    Use Iface
 default             10.х.х.1            0.0.0.0                 UG    0         0        0   vlan2
 10.х.х.0            *                       255.255.255.0     U       0         0        0   vlan2
 84.х.х.5            *                      255.255.255.255 UH    0         0        0   ppp0
 127.0.0.0          *                      255.0.0.0              U       0         0        0   lo
 169.254.0.0     *                      255.255.0.0          U       0         0        0   br0
 192.168.130.0   *                    255.255.255.0      U       0         0        0   br0
 root@My-Fan:~# route del default
 root@My-Fan:~# route add default gw 84.х.х.5
 root@My-Fan:~# route –n
 Kernel IP routing table
 Destination     Gateway         Genmask           Flags Metric Ref    Use Iface
 0.0.0.0             84.x.x.5          0.0.0.0                   UG     0         0        0   ppp0
 10.х.х.0            *                       255.255.255.0     U       0         0        0   vlan2
 84.х.х.5            *                       255.255.255.255 UH    0         0        0   ppp0
 127.0.0.0          *                      255.0.0.0              U       0         0        0   lo
 169.254.0.0     *                       255.255.0.0          U       0         0        0   br0
 192.168.130.0   *                     255.255.255.0      U       0         0        0   br0
 root@My-Fan:~#

Где IP адрес шлюза, который мы видели в команде "ifconfig" - позиция
P-t-P:84.х.х.5

  ppp0      Link encap:Point-to-Point Protocol 
          inet addr:31.х.х.4  P-t-P:84.х.х.5  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1460  Metric:1
   

Теперь нам осталось все описанное с автоматизировать для того чтоб наше устройство (роутер) все делал сам без нашего участия.  Нам необходим еще один второй скрипт, который будет проверять наш поднятый "ppp0" и в случае его отсутствия будет автоматически восстанавливать его. Текст данного скрипта ниже, его необходимо прописать так же используя WEB интерфейс устройства 192.168.130.1/Diagnostics.asp в окне ввода команд, но нажав кнопку "Save Custom script":



 #!/bin/sh
 WANup_ppp0=`ifconfig | awk '/ppp0/ {print $1}'`
 if [ "$WANup_ppp0" = "ppp0" ]; then
   Wan_ip_addr_ppp=`ifconfig | grep 84.х. | awk '{print ($2)}' | awk -F: '{print ($2)}'`
   Wan_ip_gw_ppp=`ifconfig | grep 84.х. | awk '{print ($3)}' | awk -F: '{print ($2)}'`
   nvram set wan_gateway_buf="$Wan_ip_gw_ppp"
   nvram set wan_ipaddr_buf="$Wan_ip_addr_ppp"
   iptables -t nat -A POSTROUTING -s 192.168.130.0/24 -o ppp0 -j SNAT --to-source  $Wan_ip_addr_ppp
  route del default 2>/dev/null
  route add default gw $Wan_ip_gw_ppp 2>/dev/null
  exit;
 else
   if ["$(/usr/sbin/nvram get wan_gateway)" = ""]; then
     iptables -t nat -D POSTROUTING -s 192.168.130.0/24 -o ppp0 -j SNAT --to-source $(/usr/sbin/nvram get wan_ipaddr_buf)
     route del default 2>/dev/null
     route add default gw $(/usr/sbin/nvram get wan_gateway) 2>/dev/null
     nvram set wan_ipaddr_buf=""
     exit
   fi
 fi
 exit 


Примечание, в тексте не должно быть перенос, должно иметь вид как на картинке ниже. Где поле grep 84.х. подразумевает первые два реальных числа в адресе IP полученного от провайдера (то что показала команда "ifconfig" , сетвеой интерфейс "ppp0" поле P-t-P:84.х.х.5, например "84.184"). 

 

После вставки текста, нажать снизу кнопку с надписью “Save Custom Script”, в результате он будет сохранен в окне “Custom Script” и должен иметь следующий вид

 

Примечание по скрипту, в переменные : wan_ipaddr_buf – полученный IP от провайдера для ppp0, wan_gateway_buf – полученный шлюз от провайдера для интернет через ppp0. Перегружаем роутер, и проверяем работоспособность данной настройки и работу в комплексе. 

Комментариев нет:

Отправить комментарий