пятница, 10 апреля 2009 г.

Как сделать из домашней линукс машины простейший роутер за 5 минут

Исходные условия
  • Машина с ОС Linux, c двумя сетевыми адаптерами (первый будет смотреть на ADSL модем раздающий интернет, второй - на вторую машину)
  • Машина которая желает подключится в интернет через Linux машину.
  • Настроенный ADSL роутер.
Настройка сетевых интерфейсов Linux - маршрутизатора
  • Выполняем ifconfig и смотрим название наших сетевых интерфейсов. Вероятнее всего это будет eth0 и eth1.
  • Правим конфигурационный файл интерфейсов /etc/network/interfaces вашим любимым редактором. Должно получится что-то вроде этого:

    auto lo eth0 eth1
    iface lo inet loopback

    iface eth0 inet static # интерфейс смотрящий на ADSL роутер
    address 192.168.1.3 # IP адрес
    netmask 255.255.255.0 # маска подсети
    gateway 192.168.1.1 # адрес ADSL модема(роутера)

    iface eth1 inet static # интерфейс смотрящий на внутренюю сеть
    address 192.168.10.1 # IP адрес
    netmask 255.255.255.0 # маска подсети
  • Теперь делаем рестарт коммандой
    sudo /etc/init.d/network restart
Настройка сетевого интерфейса машины в сети
  1. Для Windows
    • Создаем новое сетевое подключение
    • Используем слудующие настройки
      • IP: 192.168.10.2
      • Netmask: 255.255.255.0
      • Route: 192.168.10.1
      • DNS: настройки DNS берем от линукс машины- роутера, они записаны в файле /etc/resolv.conf (см. строчки начинающиеся с nameserver)
  2. Для Linux
    • Прописываем в /etc/network/interfaces
      auto lo eth0
      iface lo inet loopback

      iface eth0 inet static
      address 192.168.10.2
      netmask 255.255.255.0
      gateway 192.168.10.1
    • Копируем в /etc/resolv.conf строчки начинающиеся с nameserver из такого же файла роутер-машины.
    • sudo /etc/init.d/network restart
  3. Теперь роутер-машина должна пинговаться (ping 192.168.10.1)
Включение маршрутизации на Linux-роутере
  1. Создаем скрипт следующего содержания
    #!/bin/sh
    INET="eth0"
    INETIP="192.168.1.3"

    iptables -F INPUT
    iptables -F FORWARD
    iptables -F OUTPUT

    iptables -P INPUT ACCEPT
    iptables -P OUTPUT ACCEPT
    iptables -P FORWARD ACCEPT

    iptables -t nat -A POSTROUTING -o $INET -j SNAT --to-source $INETIP
    echo "1" > /proc/sys/net/ipv4/ip_forward
  2. Даем ему права на выполнение
    chmod +x <имя скрипта>
  3. Копируем в удобное место
    sudo cp <
    имя скрипта> /root/.
  4. Ставим для выполнения при загрузке, для этого добавляем следущую строчку в /etc/rc.local перед exit 0
    /root/<имя скрипта>
  5. Первый раз запускаем скрипт вручную
    sudo /root/<
    имя скрипта>