января 28, 2010

Роутер на базе ПК

Роутер из старого ПК

И так, у нас имеется "старый ПК", из которого нужно сделать роутер. Характеристики: Celeron 900 mhz, ОЗУ 384 mb, НЖМД 20 Гб, 2 сетевых интерфейса.
Ставить будем операционную систему Ubuntu Server, так как она первой попалась под руку. Я ставил версию 8.04, так как она LTS. Также не стоит пугаться консоли, обещаю у вас все получится :)
Установка ОС
Процесс установки детально описывать не буду.
Устанавливаем дистрибутив, в процессе установки разбиваем жесткий диск, так как вам нужно. Также не забудьте поставить OpenSSH (чтобы удаленно подключаться к роутеру), если вам нужен еще и веб-сервер устанавливаем LAMP и MySQL.

Настройка сетевых интерфейсов
Мы установили Ubuntu, логинимся. У нас имеются 2 сетевые карты, их нужно настроить.
eth0: 1 сетевая карта - локальная сеть Голден Телеком(Билайн) и VPN (PPTP).
eth1: 2 сетевая карта - внутренняя домашняя локальная сеть.

Запускаем консоль (Alt+F2) и пишем в консоле следующую команду:

sudo nano /etc/network/interfaces

В открывшемся файле пишем следующее
auto lo
iface lo inet loopback

iface eth1 inet static
address 192.168.1.77
netmask 255.255.255.0
auto eth1

iface eth0 inet dhcp
up route add -net 10.0.0.0 netmask 255.0.0.0 gw ваш_шлюз
up route add -host 194.186.60.108 gw ваш_шлюз
up route add -host 194.186.60.107 gw ваш_шлюз 
auto eth0 
ваш_шлюз — его смотрим  в свойствах подключения eth0, начинается с числа 10

Нажимаем Ctrl+X, далее Y и жмем Enter. Настройка сетевых интерфейсов закончена. Применим наши настройки:
sudo /etc/init.d/networking restart
*Командой ifconfig можно посмотреть активные подключения. 

IPTABLES (NAT)
Данные настройки вводятся от пользователя root. Будь аккуратны при работе от root'a! Чтобы сменить пользователя, вводим:
sudo su 

Теперь, самое интересное :) С правами root'a вводим:
iptables -t nat -A POSTROUTING -s $LOCALNET -d ! $LOCALNET -j MASQUERADE
где $LOCALNET - это наша локальная сеть, вводить нужно  192.168.1.0/24

Далее: 
iptables -A INPUT -p tcp -s 127.0.0.0/8 -j ACCEPT
iptables -A INPUT -s $LOCALNET -j ACCEPT
iptables -A INPUT -s $EXTNET -j ACCEPT
$LOCALNET - это наша локальная сеть, вводить нужно  192.168.1.0/24
$EXTNET - сеть eth0 интерфейса, вводить нужно  10.0.0.0/8

И последнее:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
Правда эти правила не сохраняются, их нужно вводить при каждом включении/перезагрузке. Поэтому пропишем их в rc.local:
sudo nano /etc/rc.local
И добавляем те две строчки описанные выше до слова exit 0

Теперь включим форвардинг:
sudo nano /etc/sysctl.conf
Найдите строчку net.ipv4.conf.default.forwarding=1 и раскомментируйте ее.

VPN соединение
Для поднятия VPN соединения, есть несколько различных способов. Я расскажу об одном из них. Для поднятия VPN соединения должен быть установлен пакет  pptp-linux, но он не идет в комплекте с дистрибутивом.
Тут я пошел на хитрость, так как сеть у меня настроена, я поднимаю Cherokee server на втором ПК и размещаю на нем заранее подготовленный пакет, и скачиваю через wget на роутер.
wget http://192.168.1.55/pptp-linux.deb
sudo dpkg -i pptp-linux.deb
 

Теперь настраиваем само подключение. Создаем файл golden в директории /etc/ppp/peers/
sudo nano /etc/ppp/peers/golden

И вписываем туда вот это:
pty «pptp fttb-vpn.voronezh.golden.ru –nolaunchpppd» #для Билайн адрес другой.
user Имя пользователя
password "Пароль!!!" #кавычки оставить
mtu 1452
nodeflate
nobsdcomp
noproxyarp
noauth
defaultroute
replacedefaultroute

Перезагружаемся.

Поднять VPN-соединение можно командой 
sudo pppd call beeline debug nodetach
Отключить - Ctrl+C Данную команду, так же можно прописать в файл rc.local, что Интернет подключался сразу при включении роутера.

Проброс портов
Открываем порт для входящих подключений (например для μTorrent).
Осуществляется командой:
iptables -t nat -A PREROUTING -i eth0 -p tcp –dport $YOUR_PORT -j DNAT –to-destination $PC_AFTER_NAT
$YOUR_PORT - порт на котором работает клиент μTorrent
$PC_AFTER_NAT - IP адрес компьютера расположенного за NAT (второй ПК, например 192.168.1.5)
Вводить правило нужно после каждого выключения/перезагрузки, поэтому его можно поместить в файл rc.local
В итоге ваш rc.local может выглядеть так:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -t nat -A PREROUTING -i eth0 -p tcp –dport $YOUR_PORT -j DNAT –to-destination $PC_AFTER_NAT
sudo pppd call golden debug nodetach
exit 0
 

Итог
В итоге имеет высокопроизводительный домашний маршрутизатор за минимальную цену. Далее можно к нашему роутеру прикрутить качалку торрентов, "файловую помойку", развернуть веб-сервер и т. д. Минусом для кого-то будет являться лишний шум в комнате + еще один потребитель электроэнергии. Такой роутер у меня проработал 2 года, сейчас за ненадобностью веб-сервера и прочих плюшек, а так же из-за незначительной поломки, я им не пользуюсь. Скажу одно, за 2 года НИ РАЗУ не перенастраивал, всё работает как часы.

3 комментария:

  1. Хорошая статья.. мой старый комп лежит сейчас поломанный, а можно было бы попробовать..

    ОтветитьУдалить
  2. iptables -t nat -A POSTROUTING -s $LOCALNET -d ! $LOCALNET -j MASQUERADE
    после ввода этой строки он матерится на "!" (восклицательный знак)
    че-то там пишет по вражески... вообщем прописывал NAT как здесь написано, но маршрутизация чего то не заработала, на beeline.ru локально доступный без PPTP доступа с других машин не было... DNS прописывал на тачках вручную билайновских два адреса... шлюз выставлял ИП компа-роутера... (либо надо было билайновский??)... мб у меня руки кривые))) тема интересная неплохо было бы ее развить... а то мало какой роутер тянет ППТП под сильной нагрузкой торентов...(

    ОтветитьУдалить
  3. Постараюсь в ближайшее время перепроверить все команды. «Машинку» оживил, Ubuntu поставил. Результаты выложу и подкорректирую неясности.

    ОтветитьУдалить