Воскресенье, 29.06.2025, 10:43
Приветствую Вас Гость | RSS
UBUNTOLOG
Главная | Каталог статей | Регистрация | Вход
Форма входа

Меню сайта
Категории раздела
Server [44]
WEB [14]
Все что связанно с web технологиями
Desktop [11]
Все что связанно с рабочей станцией
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Главная » Статьи » Server

    Настраиваем роутер на Linux Ubuntu NAT + Squid для ADSL модема

    Настраиваем роутер на Linux Ubuntu NAT + Squid для ADSL модема

    Установка и настройка первоначальных параметров.

    На установки сильно заморачиваться не будем, сложного в ней нет не чего, пройдем по самому основному.

    Для начала нам потребуется диск с сервером убунту (который можно скачать по адресу http://ubuntu.ru/get ), комп прмерно пень III с частотой700MHz, винт 40Гигов и 256 мб оперативки на борту, я для себя ставил 512, 2 сетевухи СиДиРОМ, клава, монитор и AGP.

    Ну поехали!

    Этап установки стандартны выбираем язык, раскладку, место расположения, Дальше выбираем главную сетевуху смотрящую в нет, даем адрес, маску, днс сервера, даем имя компу в моем случае это router, заводим юзера, и выбираем ПО которое будем устанавливать. Нам понадобиться только SSH Server. Рестарт высовываем диск, отключаем клаву, монитор они нам больше не понадобятся, можно отключить СиДюк для экономии энергии и улучшению быстродействия еже с ним флоп, ЮСБ, комы и всякую ересь которая нам нах не пригодиться на роутере.

    Идем по SSH к нашему серверу, я со своей убунту захожу встроенной прогой (просмотр удаленных рабочих столов), для винды есть хорошая утилитка PuTTY, для корректного отображения символов перед подключением необходимо на закладке Window - Translation выбрать кодировку UTF8. Если есть необходимость ограничения доступа к серверу можно дописать в файл /etc/ssh/sshd_config параметр AllowUsers, указав пользователя, который имеет удаленный доступ по SSH, например пользователь admin:

    AllowUsers admin

    Для разрешения доступа группе пользователей используют параметр AllowGroups, а для блокировки доступа определенным группам или пользователям используют DenyGroups и DenyUsers.

    Пробуем нет:

    ping google.ru

    Если все ОК идем дальше

    Обновляем список доступного программного обеспечения:

    sudo apt-get update
    А затем обновляем их до актуальной версии:

    sudo apt-get upgrade

    Следующим этапом устанавливаем файловый менеджер подобный к Norton Commander или Far — Midnight Commander (mc):

    sudo apt-get install mc

    Идем в sudo mcedit /etc/network/interfaces

    Дописываем второй интерфейс, пример моего конфига:

    # The loopback network interface



    auto lo



    iface lo inet loopback



    # Смотрит в нет

    auto eth1



    iface eth1 inet static



    address 192.168.1.4 #Адрес сетевой смотрящей в нет

    netmask 255.255.255.0

    #Маска сети

    network 192.168.1.0

    #Начало сети

    broadcast 192.168.1.255

    #Конец сети

    gateway 192.168.1.1

    #Ай-пишник модема

    # dns-* options are implemented by the resolvconf package, if installed



    dns-nameservers 192.168.1.1

    #Ай-пишник модема

    dns-search ubuntu.local

    #Как искать сервак в сети

    # Смотрит в локалку

    auto eth2



    iface eth2 inet static



    address 198.162.5.222

    # Адрес сетевухи смотрящей в локалку

    netmask 255.255.255.0

    #Маска сети

    gateway 192.168.1.4

    #Адрес сетевухи смотрящей в нет



    post-up /etc/nat-up #Это будет позже пока несмотрим







    Идем дальше, настраиваем DNS:

    sudo nano /etc/resolv.con

    В данном файле нужно указать DNS провайдера или адреса DNS серверов иначе несможете просматривать сайты. OpenDNS:

    #OpenDNS Servers
    nameserver 192.168.1.1
    nameserver 192.168.1.4

    nameserver 198.162.5.222

    Далее сохраняем настройки и перезагружаемся. Также вместо перезагрузки можно перезапустить сетевые службы:

    sudo /etc/init.d/networking restart

    Пробуем пинг:

    ping google.ru

    Дальше пишем фаервол:

    sudo mcedit /etc/

    Настраиваем NAT

    Для того чтобы организовать общий доступ к сети интернет нужно настроить трансляцию сетевых адресов (NAT), это позволяет сетевым службам внутренней сети получить доступ к внешней сети. Для данной настройки достаточно будет выполнить одну команду, правда есть одна особенность: все будет работать только до перезагрузки. На данный момент в Linux нет механизма сохраняющего настройки iptables при перезагрузке сети или сервера. Для устранения данного неудобства мы вынесем эти настройки в отдельный скрипт, который запускается при загрузке системы. Для начала создаем файл скрипта:

    sudo touch /etc/nat-up

    Открываем его sudo mcedit /etc/naе-up и прописаваем следующее:

    #!/bin/sh

    # очищаем все настройки

    iptables -F

    iptables -X

    iptables -t nat -F

    iptables -t nat -X

    iptables -t mangle -F

    iptables -t mangle -X

    iptables -P INPUT ACCEPT

    iptables -P FORWARD ACCEPT

    iptables -P OUTPUT ACCEPT

    #активируем форвардинг пакетов

    echo 1 > /proc/sys/net/ipv4/ip_forward

    # Всегда принимаем трафик на loopback-интерфейсе

    iptables -A INPUT -i lo -j ACCEPT

    #Настройки почты

    t nat -A PREROUTING -i eth1 -s 192.168.1.0/24 -p tcp --dport 80

    j REDIRECT --to-port 3128

    -A FORWARD -s 192.168.1.0/24 -p tcp --dport 25 -j ACCEPT

    -A FORWARD -s 192.168.1.0/24 -p tcp --dport 50 -j ACCEPT

    -A FORWARD -s 192.168.1.0/24 -p tcp --dport 53 -j ACCEPT

    -A FORWARD -s 192.168.1.0/24 -p tcp --dport 587 -j ACCEPT

    -A FORWARD -s 192.168.1.0/24 -p tcp --dport 110 -j ACCEPT

    -A FORWARD -d 192.168.1.0/24 -p tcp --sport 25 -j ACCEPT

    -A FORWARD -d 192.168.1.0/24 -p tcp --sport 50 -j ACCEPT

    -A FORWARD -d 192.168.1.0/24 -p tcp --sport 53 -j ACCEPT

    -A FORWARD -d 192.168.1.0/24 -p tcp --sport 587 -j ACCEPT

    -A FORWARD -d 192.168.1.0/24 -p tcp --sport 110 -j ACCEPT

    -t nat -A POSTROUTING -o eth2 -s 192.168.1.0/24 -j SNAT --to-source 198.162.5.222

    # Разрешаем соединения, которые инициированы внутри (eth2)

    iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

    iptables -A INPUT -m state –state NEW -i ! eth1 -j ACCEPT

    iptables -A FORWARD -i eth1 -o eth2 -m state –state ESTABLISHED,RELATED -j ACCEPT

    # Разрешаем доступ из LAN-сети к внешнему миру

    iptables -A FORWARD -i eth2 -o eth1 -j ACCEPT

    # Masquerade.

    iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

    # Запрещаем форвардинг из внешнего мира во внутреннюю сеть

    iptables -A FORWARD -i eth1 -o eth1 -j REJECT

    # заворачиваем пакеты на 80 и 8080 порты на прокси. У кого нет – строчку удаляем.

    iptables -t nat -A PREROUTING -i eth2 -d ! 198.162.5.0/24 -p tcp -m multiport –dport 80,8080 -j DNAT –to 198.162.5.254:3128



    Внеся вышеуказанные настройки, сохраняем их (F2), а для автоматического запуска скрипта вновь открываем sudo mcedit /etc/network/interfaces и в самом конце файла дописываем:

    post-up /etc/nat-up

    Также не забываем дать нашему скрипту права на исполнение:

    sudo chmod +x /etc/nat-up

    Перезапускаем сеть:

    sudo /etc/init.d/networking restart

    # Generated by iptables-save v1.3.8 on Wed Nov 18 16:04:19 2009

    *filter

    :INPUT DROP [13831:1215721]

    :FORWARD ACCEPT [618:276119]

    :OUTPUT ACCEPT [1555106:1014694429]

    -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

    -A INPUT -i lo -j ACCEPT

    -A INPUT -s 198.162.5.0/255.255.255.0 -i eth2 -j ACCEPT

    COMMIT

    # Completed on Wed Nov 18 16:04:19 2009

    # Generated by iptables-save v1.3.8 on Wed Nov 18 16:04:19 2009

    *nat

    :PREROUTING ACCEPT [5562:487193]

    :POSTROUTING ACCEPT [14944:918733]

    :OUTPUT ACCEPT [14944:918733]

    -A PREROUTING -s 198.162.5.0/255.255.255.0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128

    -A POSTROUTING -s 198.162.5.0/255.255.255.0 -o eth1 -j SNAT --to-source 192.168.1.4

    -A POSTROUTING -p tcp -m tcp -m multiport --ports 21,25,50,53,587,110,21002,16401,16402 -j MASQUERADE

    COMMIT

    # Completed on Wed Nov 18 16:04:19 2009

    Если нигде небыли допущены ошибки все будет работать. Для того чтобы проверить работоспособность, на машинах внутренней сети укажем в качестве шлюза и DNS адрес нашего роутера: 198.162.5.222 и пропингуем любой внешний адрес, к примеру один из OpenDNS серверов: 192.168.1.1. Вы, наверное, удивитесь — интернет не работает. Почему? Ведь мы указали наш роутер в качестве DNS сервера, а он пока что таким не является. Конечно, можно прописать DNS на клиентской машине, но если внезапно изменяться DNS сервера? Очень неудобно будет каждый раз бегать их перепрошивать.
    Самым приемлемым решением будет поднять на нашем роутере полноценный DNS сервер, но, как правило, это избыточно, поэтому ограничиваемся простым DNS (а также и DHCP) сервером Dnsmasq.

    sudo apt-get install dnsmasq

    После выполнения установки открываем sudo mcedit /etc/dnsmasq.conf, находим, раскомментируем и вносим изменения в строку, что разрешает серверу принимать DNS запросы из внутренней сети:

    listen-address=127.0.0.1, 198.162.5.222

    Перезапускаем DNS сервер:

    sudo /etc/init.d/dnsmasq restart

    После правильного выполнения вышеуказанных настроек на клиентских машинах начнет работать интернет.





    Если кому интересно Настраиваем DHCP я для себя не делал так что у меня этот шаг пропущен.

    ###############################################################################

    Теперь, когда наш сервер начал работу необходимо настроить клиентские машины. Конечно, все нужные параметры можно прописать вручную, но что делать, если клиентских машин слишком много, и они расположены по всему зданию? В этом случае мы и воспользуемся протоколом DHCP. Он позволяет автоматически получать все, необходимые для корректной работы, сетевые настройки. Ранее установленный Dnsmasq и выступит в качестве DHCP сервера, который очень просто настроить. Для этого открываем /etc/dnsmasq.conf и указываем диапазон выдаваемых адресов (в нашем случае 10.0.0.100-150), сетевую маску и время использования IP адреса:

    dhcp-range=198.162.5100,198.162.5.150,255.255.255.0,12h

    Адреса DNS сервера и шлюза сервер из системных настроек берет автоматически. Затем еще раз перезапускаем Dnsmasq:

    sudo /etc/init.d/dnsmasq restart

    После проделанной работы можно выставить на клиенте автоматическое получение IP адреса и убедиться в нормальной работе сервера. Выданные адреса можно посмотреть, выполнив команду:

    выставить на клиенте автоматическое получение IP адреса

    cat /var/log/syslog | grep DHCPOFFER

    Все выданные IP адреса и MAC адреса будут перечислены, с указанием кому они присвоены.

    ###############################################################################

    Настройка кэширующего прокси-сервера Squid.

    В достаточно большой сети некоторая часть трафика повторяется, и часть его иногда достигает 50%. Очень удобно кэшировать часто повторяющиеся запросы, снизив нагрузку на канал, тем самым ускорить выдачу пользователю запрашиваемых страниц и сэкономить входящий трафик. Для выполнения этих задач используем Squid - кэширующий прокси с огромными возможностями.

    sudo apt-get install squid

    Устанавливаем прокси-сервер и настраиваем его:

    sudo /etc/init.d/squid stop

    Открываем /etc/squid/squid.conf, находим и корректируем следующие строки, не забыв их раскомментировать:

    Указываем порт:

    http_port 3128 #Кто ставил DHCP Делаем прозрачность http_port 3128 transparent

    Выполняем настройки кэша:

    cache_dir ufs /var/spool/squid 4096 32 256

    Устанавливаем лимит использования памяти:

    memory_pools on
    memory_pools_limit 50 MB

    Задаем язык вывода ошибок для пользователя

    error_directory /usr/share/squid/errors/Russian-koi8-r

    Важное замечание! В версии Ubuntu 9.10 эта строка может выглядеть так, поэтому рекомендуем проверить правильность пути:

    error_directory /usr/share/squid/errors/ru

    acl all src 0.0.0.0/0.0.0.0

    acl manager proto cache_object

    acl localhost src 127.0.0.1/255.255.255.255

    acl to_localhost dst 127.0.0.0/8

    acl SSL_ports port 443 # https

    acl SSL_ports port 563 # snews

    acl SSL_ports port 873 # rsync

    acl Safe_ports port 80 # http

    ########################################################

    #Тем кто делал по DHCP

    #Указываем внутренние сети, лишние комментируем:



    # acl localnet src 10.0.0.0/24 # RFC1918 possible internal network
    # #acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
    # #acl localnet src 192.168.0.0/16 # RFC1918 possible internal network

    #Разрешаем доступ из внутренних сетей (найти и раскомментировать):

    # http_access allow localnet



    ########################################################

    acl ftp proto FTP

    always_direct allow ftp

    ########################################################

    acl Safe_ports port 21002

    acl Safe_ports port 16401

    acl Safe_ports port 16402

    #########################################################

    acl Safe_ports port 21 # ftp

    acl Safe_ports port 443 # https

    acl Safe_ports port 70 # gopher

    acl Safe_ports port 210 # wais

    acl Safe_ports port 1025-65535 # unregistered ports

    acl Safe_ports port 280 # http-mgmt

    acl Safe_ports port 488 # gss-http

    acl Safe_ports port 591 # filemaker

    acl Safe_ports port 777 # multiling http

    acl Safe_ports port 631 # cups

    acl Safe_ports port 873 # rsync

    acl Safe_ports port 901 # SWAT

    acl purge method PURGE

    acl CONNECT method CONNECT

    acl allow_ip src "/etc/squid/allow_ip" #Это фаил со списком юзеров которым даю нет

    # Создадим его sudo touch /etc/ squid/allow_ip

    # и вписуем ip юзеров в столбик

    # сохраняем закрываем

    #####################################################################

    acl special_client src 198.162.5.14 # Этот айпишник ходит только

    acl special_url url_regex .privatbank.ua # на определенный адрес

    acl utszn_client src 198.162.5.67 # У этого еше и

    acl utszn_url url_regex 213.186.218.163:7778 # определенный порт

    acl comodo_client src 198.162.5.0/198.162.5.224 # Обновление антивируса комодо

    acl comodo_url url_regex .download.comodo.com # для всей локалки

    #Закрываемся:

    http_access allow allow_ip

    http_access allow special_client special_url

    http_access deny special_url

    http_access allow utszn_client utszn_url

    http_access deny special_url

    http_access allow comodo_client comodo_url

    http_access deny comodo_url

    http_access deny all

    http_access allow purge localhost

    http_access deny purge

    http_access deny !Safe_ports

    http_access deny CONNECT !SSL_ports

    http_access allow localhost

    http_access deny all

    icp_access allow all

    ############################################################################

    Строим кеш:

    #Suggested default:

    #refresh_pattern ^ftp: 1440 20% 10080

    #refresh_pattern ^gopher: 1440 0% 1440

    #refresh_pattern . 0 20% 4320

    ##############################################################################################

    refresh_pattern \.bz2$ 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache

    refresh_pattern \.exe$ 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache

    refresh_pattern \.gif$ 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache

    refresh_pattern \.gz$ 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache

    refresh_pattern \.ico$ 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache

    refresh_pattern \.jpg$ 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache

    refresh_pattern \.mid$ 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache

    refresh_pattern \.mp3$ 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache

    refresh_pattern \.pdf$ 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache

    refresh_pattern \.swf$ 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache

    refresh_pattern \.tar$ 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache

    refresh_pattern \.tgz$ 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache

    refresh_pattern \.zip$ 43200 100% 43200 override-lastmod override-expire ignore-reload ignore-no-cache

    ################################################################################################

    Затем сохраняем файл конфигурации. Теперь строим кэш и запускаем:

    sudo /usr/sbin/squid -z
    sudo /etc/init.d/squid start

    Для того чтобы проверить настройки на клиентской машине в браузере указываем использование прокси-сервера с адресом 198.162.5.222 и портом 3128 и убеждаемся что все исправно работает.
    Теперь остается только настроить работу прокси-сервера, чтобы http трафик заворачивался на Squid автоматом, без прописывания прокси на клиенте. Для этого следует открыть
    sudo mcedit /etc/nat-up и дописать в конце строку:

    # Заворачиваем http на прокси
    iptables -t nat -A PREROUTING -i eth1 -d ! 198.162.5.0/24 -p tcp -m multiport --dport 80,8080 -j DNAT —to 198.162.5.222:3128

    Перезапускаем сеть:

    sudo /etc/init.d/networking restart

    Теперь приступим к файрволу.

    Для ознакомления и изучения, рекомендую почитать здесь. Тогда вы будете вносить осмысленные изменения в систему, а не повторять мои ошибки (=

    Включим в системе форвардинг. В файле /etc/sysctl.conf раскомментируем строчку
    net.ipv4.ip_forward=1

    Итак, на текущий момент мы имеем полностью сброшенные настройки файрвола (iptables).

    Сбрасываем цепочки:
    $ sudo iptables -F
    $ sudo iptables -F -t nat
    Запрещаем все входящие и разрешаем все исходящие и форвардинг:
    $ sudo iptables -P INPUT DROP
    $ sudo iptables -P OUTPUT ACCEPT
    $ sudo iptables -P FORWARD ACCEPT
    Разрешаем принимать ответ на УЖЕ установленный соединени:
    $ sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    Разрешаем loopback-трафик:
    $ sudo iptables -A INPUT -i lo -j ACCEPT
    Разрешаем весь трафик с нашей внутренней сети (возьмем подсеть 5):
    $ sudo iptables -A INPUT -s 198.162.5.0/24 -i eth2 -j ACCEPT
    И, залог прозрачности! Перенапрявляем весь исходящий http-трафик (на порт 80) на порт сквида 3128:
    $ sudo iptables -t nat -A PREROUTING -s 198.162.5.0/24 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
    $ sudo iptables -t nat -A POSTROUTING -s 198.162.5.0/24 -o eth1 -j SNAT --to-source 192.168.1.4

    Проверяем на клиенте интернет. Напомню, что если прокси указывать не обязательно, шлюз выставить необходимо!
    Однако, после первой же перезагрузки, мы поймем, что все наши старания ушли впустую.
    Научим же их выживанию!
    Итак, сохраним всё то, чем мы тут занимались:
    $ sudo iptables-save > /etc/firewall.conf
    У меня с судо этот финт не получился (хотя в теории вроде должен…), потому можно сделать влогинившись в рута полностью (su) и запустив команду, но без sudo.
    А теперь создадим скрипт, заставляющий ifupdown воскрешать наш файрвол:
    $ sudo nano /etc/network/if-up.d/00-iptables
    Впишем в него следующее:
    #!/bin/sh
    iptables-restore < /etc/firewall.conf
    Выставим права на исполнение:
    $ sudo chmod +x /etc/network/if-up.d/00-iptables
    Не забываем перекреститься и перезапускаем сеть sudo /etc/init.d/networking restart/перезагружаемся sudo reboot. Должно работать
    В принципе у нас есть рабочий файрвол с прозрачным прокси!

    Все настройки выполнены, и мы можем наслаждаться работой нашего сервера, который позволяет не только организовать общий доступ к сети интернет, но и кэширует http трафик и DNS запросы, а также кто ставил dhcp раздает клиентским машинам для работы в сети необходимые настройки, кто не ставил мы настроили юзеров с общим доступом к нету, юзеров у которых доступ к определенным сайтам по портам.

    Для начала этого хватить должно, по этим примерам можете настраивать как фантазии хватит.

    Удачи!



    Категория: Server | Добавил: Vyacheslav (14.09.2010)
    Просмотров: 41323 | Комментарии: 2 | Рейтинг: 0.0/0
    Всего комментариев: 2
    2 zendex  
    0
    Огромный респект за статью!

    1 lse  
    0
    Здравствуйте Vyacheslav.

    Все сделал как в статье написано.
    Сервер UBUNTU инет есть, клиентская машина пингуется, а инета на клиенте нет.
    И файл Resolv не сохраняется после перезагрузки, приходится править при каждой загрузки.

    Заранее спасибо

    Имя *:
    Email *:
    Код *:
    Copyright VR © 2025
    Сделать бесплатный сайт с uCoz