четверг, 11 сентября 2008 г.

Linux роутер своими руками.

Начнемс,
В этой статье я расскажу, как постоить небольшой и не сложный роутер с поддержкой NAT на базе Linux.
NAT (Network Address Translation — «преобразование сетевых адресов») — это механизм в сетях TCP/IP, позволяющий преобразовывать IP-адреса транзитных пакетов. Также имеет названия IP Masquerading, Network Masquerading и Native Address Translation.

Преобразование адресов методом NAT может производиться почти любым маршрутизирующим устройством — маршрутизатором, сервером доступа, межсетевым экраном. Суть механизма состоит в замене адреса источника (source) при прохождении пакета в одну сторону и обратной замене адреса назначения (destination) в ответном пакете. Наряду с адресами source/destination могут также заменяться номера портов source/destination.

Помимо source NAT (предоставления пользователям локальной сети с внутренними адресами доступа к Интернету) часто применяется также destination NAT, когда, например, обращения извне сетевым экраном транслируются на сервер в локальной сети, имеющий внутренний адрес и потому недоступный извне сети непосредственно (без NAT).

NAT выполняет две важных функции.

1. Позволяет сэкономить IP-адреса, транслируя несколько внутренних IP-адресов в один внешний публичный IP-адрес (или в несколько, но меньшим количеством, чем внутренних).
2. Позволяет предотвратить или ограничить обращение снаружи ко внутренним хостам, оставляя возможность обращения изнутри наружу. При инициации соединения изнутри сети создаётся трансляция. Ответные пакеты, поступающие снаружи, соответствуют созданной трансляции и поэтому пропускаются. Если для пакетов, поступающих снаружи, соответствующей трансляции не существует (а она может быть созданной при инициации соединения или статической), они не пропускаются.


У нас есть машинка с установленным Linux, я пользуюсь Gentoo.
Также у нас есть 2 сетевых интерфейса (eth0, eth1).
eth0 - Внешний интерфейс, "смотрит" в интернет, также это может быть ppp0 или что-то еще. (IP - динамически, полученный от провайдера или статический, как вам угодно.)
eth1 - внутренний интерфейс, "смотрит" в нашу домашнюю сеть, имеет IP: 192.168.0.1

Для начала нам необходимо включить форвард пакетов в системе, делается это просто:
в файл /etc/sysctl.conf добавляем или исправляем строку
net.ipv4.ip_forward = 1
применяем изменения
sysctl -p /etc/sysctl.conf

далее, в iptables добавляем правило для маршрутизации наших пакетов.
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE

в этом правиле мы говорим, что все пакеты приходящие с адресов 192.168.0.1 - 192.168.0.255 должны отправляться через интерфейс eth0(ppp0, ...) и к ним должен применяться адрес источника этого же интерфейса.

сохраняем правила, в Gentoo это делается так:
/etc/init.d/iptables save

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