Четверг, 24.07.2025, 07:53

Блог Владимира Степанова

Реклама
Статистика
Яндекс.Метрика
Онлайн всего: 1
Гостей: 1
Пользователей: 0
Меню
Категории раздела
FreeBSD OpenBSD [1]
Установка [4]
Настройка [21]
WWW [1]
Мелочи [1]
Файловая система [0]
Вход на сайт
Реклама
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Главная » Статьи » Unix системы » Настройка

    Настройка 2-х каналов в Интернет.

    Настройка 2-х каналов в Интернет.

    Автор: dikens3.


    Друган подключился к Интернету. Подключение через PPPoE со статическим внешним IP-Адресом. Настроил ему сервак, Samb’у, apache, ssh и прочие сервисы ему прикрутил. Всё отлично работало. Но время идёт, мир меняется, и вот подключил он себе ещё один Интернет канал c безлимитным трафиком и скоростью 300kbit/s. Вот и попросил меня перенастроить полностью сервак, установить FreeBSD 6 попутно (ранее было ещё 5.3).

    Что имеем:
    FreeBSD 6.2
    Два Интернет канала:
    1. Через PPPoE с внешним IP-Адресом. (195.28.84.160) Трафик платный.
    2. Через обычный LAN, выдан внутренний адрес 10.17.2.30 (Шлюз 10.17.127.254) Безлимитка.
    На безлимитке нет входящих соединений, и какие-либо сервисы предоставлять бессмысленно. Зато ослик рулит в ней с low ID.

    Что нужно:
    Через PPPoE:
    1. Сделать доступ к www страничкам.
    2. Сделать удалённое управление сервером через ssh.
    3. Сделать проброс порта на домашний компьютер (На домашнем компе стоит Radmin). Соединение входящее, и только через PPPoE.
    Остальное по безлимитке.

    Приступаем…
    В ядро докинул и пересобрал:
     # Мои настройки 
    options IPSTEALTH 
    options IPFIREWALL 
    options IPFIREWALL_VERBOSE 
    options IPFIREWALL_VERBOSE_LIMIT=300 
    options IPDIVERT 
    options TCP_DROP_SYNFIN 
    options IPFIREWALL_FORWARD 
    options DUMMYNET 
    options DEVICE_POLLING 
    options HZ=1000 

    /etc/rc.conf
    # Сеть 
    defaultrouter="10.11.12.254" 
    # ed0 - Безлимитка 
    ifconfig_ed0="inet 10.17.2.30 netmask 255.255.128.0" 
    # rl0 – внутренняя сеть 
    ifconfig_rl0="inet 192.168.1.100 netmask 255.255.255.0" 
    # rl1 подключена к ADSL-Модему, который настроен bridge’м. 
    ifconfig_rl1="inet 10.11.12.249 netmask 255.255.255.248 -arp" 
    # Samba samba_enable="yes" 
    # Monit (порт 2812) 
    monit_enable="YES" 
    # SSH (22 порт) 
    sshd_enable="YES" 
    # PPPoE 
    ppp_enable="YES" 
    ppp_profile="Internet" 
    ppp_mode="ddial" 
    ppp_user="root" 
    ppp_nat="YES" 
    # Наш файрвол 
    firewall_enable="YES" 
    firewall_script="/etc/myfirewall" 
    # Nat natd_enable="YES" 
    natd_flags="-f /etc/natd.cf" 
    # NTP ntpd_enable="YES" 
    # Apache (80 порт) apache_enable="YES" 

    Опишу основное:
     defaultrouter="10.11.12.254" 
    # rl1 подключена к ADSL-Модему, который настроен bridge’м. 
    ifconfig_rl1="inet 10.11.12.249 netmask 255.255.255.248 -arp" 

    -arp (Отключаем ARP протокол, у прова своя сеть с IP-Адресами 10.x.x.x, 192.168.x.x и т.п.)
    1. Нельзя сделать соединение через PPPoE Default’овым маршрутом, т.к. после его смерти в таблице маршрутизации нет никакого default’ового маршрута. И инета нет совсем.
    2. Почему выбран именно через rl1? Непомню, что-то у меня не получилось через ed0.

    /etc/natd.cf
    #unregistered_only yes 
    use_sockets yes 
    deny_incoming yes 
    same_ports yes 
    interface ed0 
    verbose no 
    log no 
    port 8668 

    Закомментированную строку можно удалить, но никак не включать.

    /etc/ppp/ppp.conf
    default: Internet:
     set log Phase tun command
     set device PPPoE:rl1
     set authname login
     set authkey password
     set mru 1492
     set mtu 1492
     enable lqr
     set lqrperiod 10
     enable lqr echo
     enable echo
     set dial
     set login
     set timeout 0
     set redial 0 0 
    # NAT
     nat enable yes 
    # Тут порт Radmin прокидываем
     nat port tcp 192.168.1.1:6666 6666
     nat log no nat same_ports yes
     nat unregistered_only yes
     nat deny_incoming no 

    /etc/myfirewall
    #!/bin/sh - 
     
    testgwvt=$(/sbin/ifconfig | grep "inet 195.28.84.160" | awk '{print $4}')
    
     if (test $testgwvt) then 
    # Есть соединение с Волга-Телеком, выдираем Gateway 
    gwvt=$testgwvt else 
    # Нет соединения с Волга-Телеком, присваиваем какой-нибудь IP-Адрес 
    gwvt="213.177.127.16" fi 
    # Интерфейс нашей лок.сети iflan="rl0" 
    # Интерфейс подключённый к Sandy ifsandy="ed0" 
    # Интерфейс(ы), подключенный к Волга-Телеком mytun="tun*" 
    # Все IP-Адреса нашей лок.сети mylan="192.168.1.0/24" 
    # Пользователи, которым разрешен доступ в инет 
    users="192.168.1.0{1-254}" 
    # IP-Адреса DNS серверов Волга-Телеком (PPPoE) 
    dnsvt="213.177.96.1, 213.177.97.1" 
    # IP-Адреса DNS серверов Sandy 
    dnssandy="195.122.226.2, 10.240.240.240" 
    # Шлюз Sandy gwsandy="10.17.127.254" 
    # Пользователи, которым можно подключаться по SSH, 
    # пинговать наш сервер и доступ к monit 
    ssh_ip_users="IP1,IP2 и т.д." 
    # Порт на котором висит Radmin в нашей лок. сети radminport="6666" 
    # NTP СЕРВЕРА 
    ntp="62.117.76.139,195.230.70.112,194.149.67.130,\
     131.216.22.17,216.32.94.18,216.204.156.2" 
    
    ########################################################################### 
    # 1 таблица, куда нельзя ходить через Волга-Телеком (Приватные сети и т.п.) 
    fwtable="/sbin/ipfw table" 
    ${fwtable} 1 flush 
    NETS=" 0.0.0.0/8 10.0.0.0/8 127.0.0.0/8 172.16.0.0/12 192.168.0.0/16 169.254.0.0/16\
     192.0.2.0/24 204.152.64.0/23 224.0.0.0/3 " 
    for lan in ${NETS} 
     do 
     ${fwtable} 1 add $lan
     done 
    ########################################################################### 
    fwcmd="/sbin/ipfw -q" 
    ${fwcmd} -f flush 
    ${fwcmd} pipe flush 
    ${fwcmd} queue flush 
    ########################################################################### 
    # Пускаем lo 
    ${fwcmd} add pass all from any to any via lo0 
    # Входящий траффик из нашей сети на шлюз 
    ${fwcmd} add skipto 5000 all from any to me in via ${iflan} 
    # Netbios из нашей сети на шлюз (Для работы Samb'ы) 
    ${fwcmd} add pass udp from 
    ${mylan} 137,138 to 192.168.1.255 in via ${iflan} 
    # Исходящий траффик от шлюза в нашу сеть 
    ${fwcmd} add skipto 6000 all from me to any out via ${iflan} 
    # Входящий траффик из Интернета через Sandy, применяется NAT 
    # и адрес назначения всегда наш (Пользователям и шлюзу) 
    ${fwcmd} add skipto 7000 all from any to me in via ${ifsandy} 
    # Исходящий траффик в интернет от шлюза, через PPPoE и Sandy 
    # Т.к. маршрутов несколько, придётся перехватывать нужный траффик 
    # и отправлять нужным маршрутом 
    ${fwcmd} add skipto 8000 all from me to any out 
    # Входящий траффик из Интернета на шлюз, через PPPoE 
    # tun*, т.к. иногда туннель умирает напрочь и приходится его киллять(kill),после 
    # перезапуска туннель может измениться tun1,tun2,tun3. 
    # default gateway тоже изменяется. 
    ${fwcmd} add skipto 10000 all from any to me in via ${mytun} 
    # Входящий траффик из нашей сети в интернет 
    ${fwcmd} add skipto 11000 all from any to any in via ${iflan} 
    # Разрешаем отправку пришедшего интернет трафика через iflan 
    ${fwcmd} add pass all from any to any out recv ${ifsandy} xmit ${iflan} 
    ${fwcmd} add pass all from any to any out recv ${mytun} xmit ${iflan} 
    # Исходящий траффик из нашей сети в интернет, через PPPoE и Sandy 
    # Т.к. маршрутов несколько, придётся перехватывать нужный траффик 
    # и отправлять нужным маршрутом 
    ${fwcmd} add skipto 12000 all from any to any out 
    # Т.к. Nat есть ещё и на PPPoE, адрес назначения может быть не нашего сервера 
    # (т.е. не me) # Входящий траффик из Интернета в нашу сеть, через PPPoE 
    ${fwcmd} add skipto 13000 all from any to any in via ${mytun} 
    # Всё остальное убиваем и пишем в log 
    ${fwcmd} add deny log all from any to any 
    ########################################################################### 
    # Входящий траффик из нашей сети на шлюз 
    # Пропускаем траффик, с уже установленным соединением 
    ${fwcmd} add 5000 pass tcp from ${mylan} to me in via ${iflan} established 
    # Разрешаем подключаться к след.TCP портам из нашей сети (ssh,www,smbd) 
    ${fwcmd} add pass tcp from ${mylan} to me 22,80,139,445 \ 
    in via ${iflan} setup # Разрешаем след.UDP порты из нашей сети (ntp,nmbd) 
    ${fwcmd} add pass udp from ${mylan} to me 123,137,138 in via ${iflan} 
    # Пропускаем ICMP, только нужные (ping) 
    ${fwcmd} add pass icmp from ${mylan} to me in via ${iflan} icmptype 8,0 
    # Всё остальное убиваем и пишем в log 
    ${fwcmd} add deny log all from any to any 
    ########################################################################### 
    # Исходящий траффик со шлюза в нашу сеть 
    # Пропускаем траффик, с уже установленным соединением 
    ${fwcmd} add 6000 pass tcp from me to ${mylan} out via ${iflan} established 
    # Разрешаем след.UDP порты в нашу сеть (ntp,nmbd) 
    ${fwcmd} add pass udp from me 123,137,138 to any out via ${iflan} 
    # Пропускаем ICMP, только нужные (ping) 
    ${fwcmd} add pass icmp from me to ${mylan} out via ${iflan} icmptype 0,8,11 
    # Всё остальное убиваем и пишем в log 
    ${fwcmd} add deny log all from any to any 
    ########################################################################### 
    # Входящий траффик из Интернета через Sandy (Пользователи и шлюз) 
    # NAT in 
    ${fwcmd} add 7000 divert natd all from any to any in via ${ifsandy} 
    # Пропускаем траффик, с уже установленным соединением 
    ${fwcmd} add pass tcp from any to any in via ${ifsandy} established 
    # Пропускаем ICMP-только нужные 
    ${fwcmd} add pass icmp from any to any in via ${ifsandy} icmptype 0,3,11 
    # Разрешённые UDP 
    ${fwcmd} add pass udp from any 4000 to ${users} in via ${ifsandy} 
    # DNS 
    ${fwcmd} add pass udp from ${dnssandy} 53 to any in via ${ifsandy} 
    # NTP (123 port) 
    ${fwcmd} add pass udp from ${ntp} 123 to me 123 in via ${ifsandy} 
    # Всё остальное убиваем и пишем в log 
    ${fwcmd} add deny log all from any to any 
    ########################################################################### 
    # Исходящий траффик в интернет от шлюза, через PPPoE и Sandy. 
     # Волга-Телеком (PPPoE) 
    # Пропускаем траффик, с уже установленным соединением с определённых портов 80 
    ${fwcmd} add 8000 fwd ${gwvt} tcp from me 80,2812 to any out established 
    # SSH для нужных IP (Разрешаем работать по SSH) 
    ${fwcmd} add fwd ${gwvt} tcp from me 22 to ${ssh_ip_users} out established 
    # SSH для нужных IP (Разрешаем шлюзу подключение по SSH к другим серверам) 
    ${fwcmd} add fwd ${gwvt} tcp from me to any 22 out 
    # Пропускаем ICMP, только нужные коды и необходимые IP(ответы на ping) 
    ${fwcmd} add fwd ${gwvt} icmp from me to ${ssh_ip_users} out icmptype 0 
    # DNS Волга-Телеком 
    ${fwcmd} add fwd ${gwvt} udp from me to ${dnsvt} 53 out 
    # DNS Волга-Телеком (Будем пингом проверять связь) 
    ${fwcmd} add fwd ${gwvt} icmp from me to ${dnsvt} out icmptype 8 
    # Sandy 
    # NAT out 
    ${fwcmd} add divert natd all from any to any out 
    # Пропускаем TCP 
    ${fwcmd} add fwd ${gwsandy} tcp from me to any out 
    # Пропускаем ICMP 
    ${fwcmd} add fwd ${gwsandy} icmp from me to any out 
    # Traceroute 
    ${fwcmd} add fwd ${gwsandy} udp from me to any 33435-33524 out 
    # NTP (123 port) 
    ${fwcmd} add fwd ${gwsandy} udp from me 123 to ${ntp} 123 out 
    # DNS Sandy 
    ${fwcmd} add fwd ${gwsandy} udp from me to ${dnssandy} 53 out 
    # Всё остальное убиваем и пишем в log 
    ${fwcmd} add deny log all from any to any 
    ########################################################################### 
    # Входящий траффик из Интернета на шлюз, через PPPoE 
    # Пропускаем траффик, с уже установленным соединением 
    ${fwcmd} add 10000 pass tcp from any to me in via ${mytun} established 
    # Разрешаем подключаться к след.TCP портам с определённых IP (ssh) 
    ${fwcmd} add pass tcp from ${ssh_ip_users} to me 22,2812 \ 
    in via ${mytun} setup # Пропускаем ICMP, только нужные коды и необходимые IP(ping) 
    ${fwcmd} add pass icmp from ${ssh_ip_users} to me \ 
    in via ${mytun} icmptype 8 
    ${fwcmd} add pass icmp from ${dnsvt} to me in via ${mytun} icmptype 0 
    # Разрешаем след.UDP порты 
    ${fwcmd} add pass udp from ${dnsvt} 53 to me in via ${mytun} 
    # Прибиваем левый трафик 
    ${fwcmd} add deny log all from table\(1\) to me in via ${mytun} 
    # Разрешаем подключаться к след.TCP портам всем 
    ${fwcmd} add pass tcp from any to me 80 in via ${mytun} setup 
    # Всё остальное убиваем и пишем в log 
    ${fwcmd} add deny log all from any to any 
    ########################################################################### 
    # Входящий траффик из нашей сети в интернет. 
    # Прибиваем левых пользователей 
    ${fwcmd} add 11000 deny log all from not ${users} to any in via ${iflan} 
    # Разрешаем всё для пользователей 
    ${fwcmd} add pass all from ${mylan} to any in via ${iflan} 
    # Всё остальное убиваем и пишем в log 
    ${fwcmd} add deny log all from any to any 
    ########################################################################### 
    # Исходящий траффик из нашей сети в интернет, через PPPoE и Sandy 
    # Прибиваем левых пользователей 
    ${fwcmd} add 12000 deny log all from not ${users} to any out 
    # Разрешаем Radmin для Radmin пользователей 
    ${fwcmd} add fwd ${gwvt} tcp from ${mylan} ${radminport} \
     to any out established 
    # Разрешаем DNS Волга-Телеком 
    ${fwcmd} add fwd ${gwvt} udp from ${mylan} to ${dnsvt} 53 out 
    # Разрешаем PING DNS Волга-Телеком 
    ${fwcmd} add fwd ${gwvt} icmp from ${mylan} to ${dnsvt} out icmptype 8 
    # NAT out 
    ${fwcmd} add divert natd all from any to any out recv ${iflan} 
    # Пропускаем уже принятые на интерфейсе iflan и обработанные файрволом 
    ${fwcmd} add fwd ${gwsandy} all from me to any out recv ${iflan} 
    # Всё остальное убиваем и пишем в log 
    ${fwcmd} add deny log all from any to any 
    ########################################################################### 
    # Входящий траффик из Интернета в нашу сеть, через PPPoE 
    # Разрешаем Radmin (setup и established пакеты) 
    ${fwcmd} add 13000 pass tcp from any to ${mylan} ${radminport} \
     in via ${mytun} # Разрешаем DNS Волга-Телеком 
    ${fwcmd} add pass udp from ${dnsvt} 53 to ${mylan} in via ${mytun} 
    # Разрешаем DNS Волга-Телеком (ответы на PING) 
    ${fwcmd} add pass icmp from ${dnsvt} to ${mylan} in via ${mytun} icmptype 0 
    # Всё остальное убиваем и пишем в log 
    ${fwcmd} add deny log all from any to any 

    Смотрим как всё взлетело:
    #ifconfig 
    rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
     options=48<VLAN_MTU,POLLING>
     inet 192.168.1.100 netmask 0xffffff00 broadcast 192.168.1.255
     ether 00:50:22:95:d7:0f
     media: Ethernet autoselect (100baseTX <full-duplex>)
     status: active 
    ed0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
     inet 10.17.2.30 netmask 0xffff8000 broadcast 10.17.127.255
     ether 00:e0:7d:84:64:88
     media: Ethernet autoselect (10baseT/UTP) 
    rl1: flags=88c3<UP,BROADCAST,RUNNING,NOARP,SIMPLEX,MULTICAST> mtu 1500
     options=48<VLAN_MTU,POLLING>
     inet 10.11.12.249 netmask 0xfffffff8 broadcast 10.11.12.255
     ether 00:e0:4c:77:07:f9
     media: Ethernet autoselect (100baseTX <full-duplex>)
     status: active 
    lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
     inet 127.0.0.1 netmask 0xff000000 
    tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1492
     inet 195.28.84.160 --> 213.177.127.118 netmask 0xffffffff
     Opened by PID 404 

    для полноты картины на форуме приведён ipfw -ad list и его обсуждение.

    Если PPPoE соединение отвалится и восстановится, простым перезапуском фаера нужно будет изменить gateway для PPPoE. Для этого создадим файл /etc/ppp/ppp.linkup следующего содержания:
    MYADDR: !bg /etc/myfirewall !bg /usr/bin/logger -t LINKUP "Перезапускаем /etc/myfirewall" 

    Теперь, как только создаётся PPPoE соединение, перезапускается файрвол(В нём новый маршрут выдирается с помощью ifconfig)
    В логах будет присутствовать запись:
    Mar 26 17:44:01 server LINKUP: Перезапускаем /etc/myfirewall 

    Иногда приходится править /etc/ppp/ppp.conf и обычным kill прибить PPPoE соединение, для этого я написал скрипт и закинул в крон:
    #!/bin/sh 
    # Определяем IP-Адрес шлюза PPPoE соединения 
    gatewayip=$(/sbin/ifconfig | grep "inet 195.28.84.160" | awk '{print $4}') 
    # Определяем IP-Адрес шлюза в конфиге ipfw 
    gatewayipfw=$(ipfw -ad list | grep "from me 22 to" | awk '{print $5}') 
    # Сравниваем оба шлюза
     if (test $gatewayip)
     then 
    # Сравниваем с Gateways
     if (test "$gatewayip" = "$gatewayipfw")
     then 
    # Шлюзы равны, выходим
     exit 0
     else 
    # Не равны, перезапускаем myfirewall
     echo "Перезапускаем myfirewall" | logger -t TESTPPPOE
     /etc/./myfirewall
     fi
     else 
    # PPPoE соединения нет совсем, проверяем наличия 
    # pppoe скрипта с автомат. переподключением
     nal=$(ps -ax | grep "Internet" | grep -v grep)
     if (test $nal)
     then 
    # Есть скрипт, ничего не делаем
     exit 0
     else 
    # Нет скрипта, запускаем заново PPPoE
     echo "Запускаем PPPoE соединение." | logger -t TESTPPPOE
     /usr/sbin/ppp -quiet -ddial -nat Internet
     fi
     fi 

    На этом всё, пользуйтесь.



    размещено: 2007-03-21,
    последнее обновление: 2007-03-26,
    автор: dikens3

    Категория: Настройка | Добавил: Raxxell5059 (22.12.2010)
    Просмотров: 2090 | Рейтинг: 0.0/0
    Всего комментариев: 0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]