Простейший Nat в linux с помощью iptables

Июнь 5, 2010

Очень часто бывает нужен простой Nat чтобы дать нескольким другим компьютерам доступ в сеть. Конечно, можно поставить squid или vpn сервер, но зачем, когда можно более просто, и лаконично дать доступ? Этот небольшой пост как раз об этом. Когда я был "мал да зелен", и приобрёл второй компьютер, я зачем-то сразу полез ставить squid. Опыта было мало, а сделать нужно было. В итоге после недели мучений, я это дело бросил. Опыта и знаний явно не хватало. С iptables я тогда был незнаком, поэтому оставил это дело, и решил купить роутер, но тут один знакомый админ со стажем, подсказал мне как легко, и просто можно "раздать" сеть.

Для начала, включим форвардинг в ядре если не включен:

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

Для того, чтобы ядро загружалось всегда с включенным форвариднгом надо открыть файл /etc/sysctl.conf (от супер пользователя - root), и в него добавить или изменить имеющуюся строчку:

net.ipv4.ip_forward=1

Фактически сам nat делается одной командой:

sudo iptables -t nat -I POSTROUTING -s 192.168.8.0 -j MASQUERADE

Этой командой мы делаем "полный nat" для компьютера с адресом 192.168.8.0. Полный в том смысле, что всё, что видит компьютер сервер (тот, на котором nat), то видит и клиент. Если компьютеров несколько, и находятся они в одной подсети, то можно указать диапазон адресов с помощью маски:

sudo iptables -t nat -I POSTROUTING -s 192.168.8.0/255.255.255.0 -j MASQUERADE

Маска 255.255.255.0 разрешает 254 адреса. Т.е. все адреса от 192.168.8.1 до 192.168.8.254. Для расчёта диапазона адресов, рекомендую использовать какой либо из интернет калькуляторов. Например этот.

В случае если сервер видит несколько сетей, а необходимо дать доступ к одной, то это можно сделать так:

iptables -t nat -A POSTROUTING -o eth1 -s 192.168.8.0/255.255.255.0 -j MASQUERADE

На компьютере "клиенте", чтобы появилась сеть, необходимо в качестве шлюза по умолчанию (gateway), указать адрес nat сервера.

Рекомендую использовать этот способ только в домашней локальной сети. В общественной сети легко можно подменить ip адрес.

----------
Сейчас очень большой спрос на недвижимость за рубежом. Всё больше людей предпочитаю купить домик где нибудь в Чехии, и ездить туда на лето отдыхать. Ведь в ряде случаев, это может оказаться дешевле чем ездить по тур. путёвкам. Покупать недвижимость в Чехии, и за рубежом вообще стоит только у проверенных фирм и компаний. Например недвижимость в южной Чехии от www.Karlovy-Vary.ru как раз является надёжной фирмой.

Похожие записи:

  1. Интернет на нетбук через bluetooth
  2. Настраиваем простейший VPN сервер для дома
  3. Безвозвратное удаление с помощью shred & wipe
  4. Монтирование удалённых каталогов с помощью SFTP
  5. ssh - уведомления по email

Тэги: , , ,
В категориях: Tutorials by bosha

31 Комментариев к "Простейший Nat в linux с помощью iptables"

  1. dyug написал:

    Что курил автор при изложении вот такого бреда?????
    "Маска 255.255.255.0 разрешает 24 адреса. Т.е. все адрес от 192.168.8.0 до 192.168.8.24."

    и как давно маска 255.255.255.0 стала разрешением 24 адресов, на не 256 адресов?

    как я понимаю, сам аФтАр не смог понять принципа формирования адресов, да и воспользоваться калькулятором он тоже не смог..

    [Ответить]

    bosha Отвечает:

    Пардон. Я опечатлся спросони.

    Спасибо за исправление, но нельзя ли быть проще? Ошибки все допускают, особенно во время сессии, и когда посты готовят пачкой на пару недель вперёд.

    [Ответить]

    dyug Отвечает:

    теоретически - можно.
    Только вот в таком виде - сколько после этого му* будут мне доказывать, что вот же человек написал, и оно работает как он написал..

    Да, и ссылка на ипкалк была не совсем корректна, в конце урла подставляламь точка с запятой, что и приводило к нерабчей ссылке.

    P.S. все ошибаются.

    [Ответить]

    bosha Отвечает:

    Я почему-то спросони не количество адресов решил указать, а бит. Сам не знаю почему.

    >Только вот в таком виде – сколько после этого му* будут мне доказывать, что вот же человек написал, и оно работает как он написал..

    Не спорю, но всё же одна случайная ошибка не указывает на то, что автор не разобрался в том, о чём пишет. Я бы не стал писать не разобравшись сам =]

    >Да, и ссылка на ипкалк была не совсем корректна, в конце урла подставляламь точка с запятой, что и приводило к нерабчей ссылке.

    Из-за плагина который делает редирект такое бывает с некоторыми браузерами и адресами. Если такое часто повторяться будет, то выключу его.

    [Ответить]

  2. Анонимный аналитик написал:

    Автор, убире пост, не позорься. И да, ссылка на ipcalc нерабочая.

    [Ответить]

    bosha Отвечает:

    В чём позор? В опечатке спросони?

    Ссылка рабочая.

    [Ответить]

  3. Juev написал:

    Ммм... Сколько ананистов набежало... =D

    [Ответить]

    bosha Отвечает:

    Всего один вроде =]

    [Ответить]

  4. predator написал:

    Спасибо! Как раз хотел сделать себе шлюз =)

    [Ответить]

    bosha Отвечает:

    Всегда пожалуйста =]

    [Ответить]

    predator Отвечает:

    Ещё понадобилось
    echo 1 > /proc/sys/net/ipv4/ip_forward
    и в "/etc/sysctl.conf"
    net.ipv4.ip_forward=1

    [Ответить]

  5. dma написал:

    Какой интересный адрес компьютера 192.168.8.0, да и к чему он там?

    -I тут тоже не к месту.

    Правильная строка ната без заморочек выглядит так:

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

    [Ответить]

    dma Отвечает:

    И да, ипфорвардинг должен быть включен.

    [Ответить]

    bosha Отвечает:

    Спасибо. Добавил.

    [Ответить]

    bosha Отвечает:

    >Какой интересный адрес компьютера 192.168.8.0, да и к чему он там?

    Обычный адрес. Первый который в голову пришёл для примера.

    >Правильная строка ната без заморочек выглядит так:

    Правильная? Я указал адрес. Ошибкой это не является. Извините, привычка не разрешать всё подряд. Случаи разные бывают. Даже в домашней сети.

    [Ответить]

    dma Отвечает:

    Это не обычный адрес, а адрес подсети. Компьютер не может иметь такой адрес.

    [Ответить]

    dma Отвечает:

    А еще ваш нат работает во все стороны, по идее. В общем, все неправильно. :)

    [Ответить]

    bosha Отвечает:

    У меня (и не только) работает. Уже сколько раз использовал. По какой же идее не работает? Правила верны, форвардинг включен.

    [Ответить]

  6. Konstantin Khomoutov написал:

    bosha, dma имел в виду, что если не указан исходящий интерфейс (-o), то правило применяется к трафику, идущему с любого интерфейса. Представь, что у тебя два интерфейса в приватных сетях (например, 192.168.8.0/24 на eth1 и 192.168.9.0/24 на eth2) -- с твоим правилом без -o ВНЕЗАПНО (tm) начнёт маскарадиться трафик из 192.168.8 в 192.168.9.

    В твоём (вероятно, простейшем) случае вряд ли такое будет иметь место, но держать в уме стОит.

    Соответственно, "...дать доступ к одной" в последнем параграфе это не вполне верно: доступ ты ограничиваешь как раз при помощи -s (хотя обычно это делают в цепочке FORWARD), а -o указывает интерфейс на котором маскарадинг будет иметь место.

    Лично я за версию dma из коммента 5 с добавкой сети (если нужно):
    iptables -t nat -A POSTROUTING -o eth0 -s 192.168.8.0/24 -j MASQUERADE

    [Ответить]

    bosha Отвечает:

    bosha, dma имел в виду, что если не указан исходящий интерфейс (-o), то правило применяется к трафику, идущему с любого интерфейса. Представь, что у тебя два интерфейса в приватных сетях (например, 192.168.8.0/24 на eth1 и 192.168.9.0/24 на eth2) — с твоим правилом без -o ВНЕЗАПНО ™ начнёт маскарадиться трафик из 192.168.8 в 192.168.9.

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

    Лично я за версию dma из коммента 5 с добавкой сети (если нужно):
    iptables -t nat -A POSTROUTING -o eth0 -s 192.168.8.0/24 -j MASQUERADE

    У меня такой же пример, только указан другой интерфейс и маска вместо бита. Нумерация интерфейсов может быть любой. У кого то это может оказаться eth3. Я так понимаю Вам просто не понравилась формулировка? Я с радостью изменю на более верную, только предложите её ;)

    [Ответить]

  7. guest написал:

    >Маска 255.255.255.0 разрешает 256 адресов. Т.е. все адрес от 192.168.8.0 до 192.168.8.256.

    Не обижайтесь, но все же вы не разбираетесь в вопросе. В этих двух предложениях две ошибки - математическая и техническая.

    В диапазоне от 0 до 256 всего чисел 257 (сюрприз).
    Вторая ошибка - адрес 192.168.8.256. Попробуйте присвоить такой адрес своей сетевой карте. Фокус в том, что десятичное 256 это 100 шестнадцатеричное, т.е. требует более одного октета для записи. А поскольку адрес IPv4 состоит всего из четырех октетов, то и значения в нем не могут превышать 255.

    [Ответить]

    bosha Отвечает:

    Да, признаю. Есть ошибка. По невнимательности лишнюю цифру приписал, от этого "вылезла" вторая ошибка.

    Спасибо.

    [Ответить]

  8. ivlad66 написал:

    н-да уж уважаемый
    вы уж либо отоспитесь, либо ...
    да и мануалы покурить не помешает =)

    [Ответить]

    bosha Отвечает:

    @ivlad66, комментарий, извините, ни о чём. Можно конкретнее что по Вашему не так?

    [Ответить]

  9. O_O написал:

    Можно я тоже кину камень в огород, выше уже было замечание, что компьютер не должен иметь адреса оканчивающиеся на 0 и 255, ноль зарезервирован для подсетей, 255 для широковещательных сообщений.

    [Ответить]

    bosha Отвечает:

    @O_O, там где-то написано что нужно использовать *.0 для ПК?

    [Ответить]

  10. O_O написал:

    Ага..

    "Этой командой мы делаем "полный nat" для компьютера с адресом 192.168.8.0."

    [Ответить]

    bosha Отвечает:

    @O_O, это же пример. Переформулирую: я где-то призываю использовать адрес на *.0?

    [Ответить]

  11. O_O написал:

    Не корректный пример, может привести к ошибке или ошибочному пониманию :) Я без сарказма, сам учусь.

    [Ответить]

    bosha Отвечает:

    @O_O, убедили, исправлю :)

    Спасибо за дополнения\исправления.

    [Ответить]

  12. magomed написал:

    Добрый день! у меня небольшая проблема! если сможете помочь был бы благодарен

    есть сервер на котором поднят нат, за натом около 1000 абонентов и вот у них возникли такие проблемы как : работает ICQ но не работает QIP и джаббер, все сайты работают видео показывает за исключением видео на сайте VKONTAKTE.RU а сам сайт нормально работает только видео не работает не работает SUPPORT и клиентская программа друг вокруг.
    iptables-save
    :INPUT DROP [0:0]
    :FORWARD DROP [2587:161682]
    :OUTPUT ACCEPT [38:7566]
    -A INPUT -s 192.168.181.1
    -A INPUT -s 192.168.180.1
    -A INPUT -p icmp -j ACCEPT
    -A INPUT -i eth0.181 -p icmp -j ACCEPT
    -A INPUT -i eth1.180 -p icmp -j ACCEPT
    -A INPUT -s 192.168.117.0/255.255.255.0 -j ACCEPT
    -A INPUT -d 127.0.0.1 -j ACCEPT
    -A INPUT -s 127.0.0.1 -j ACCEPT
    -A INPUT -s 192.168.180.0/255.255.255.252 -j ACCEPT
    -A INPUT -s 192.168.181.0/255.255.255.252 -j ACCEPT
    -A INPUT -d 192.168.180.0/255.255.255.252 -j ACCEPT
    -A INPUT -d 192.168.181.0/255.255.255.252 -j ACCEPT
    -A FORWARD -s 192.168.180.1 -d 192.168.117.0/255.255.255.0 -j ACCEPT
    -A FORWARD -s 192.168.117.0/255.255.255.0 -d 192.168.180.1 -j ACCEPT
    -A FORWARD -p udp -m udp --dport 135:139 -j REJECT --reject-with icmp-port-unreachable
    -A FORWARD -p tcp -m tcp --dport 135:139 -j REJECT --reject-with icmp-port-unreachable
    -A FORWARD -p udp -m udp --dport 445 -j REJECT --reject-with icmp-port-unreachable
    -A FORWARD -p tcp -m tcp --dport 445 -j REJECT --reject-with icmp-port-unreachable
    -A FORWARD -p tcp -m tcp -m multiport --dports 25,53,80,110,8080,443,5190,5222,5223,3646,491,8190,9044,8127,573 -j ACCEPT
    -A FORWARD -p tcp -m tcp -m multiport --sports 25,53,80,110,8080,443,5190,5222,5223,3646,491,8190,9044,8127,573 -j ACCEPT
    -A FORWARD -s 192.168.0.0/255.255.0.0 -p tcp -m tcp ! --dport 80 --tcp-flags FIN,SYN,RST,ACK SYN -m connlimit --connlimit-above 200 --connlimit-mask 32 -j DROP
    -A FORWARD -s 192.168.0.0/255.255.0.0 -p udp -m state --state NEW -m recent --set --name UDPFLOOD --rsource
    -A FORWARD -s 192.168.0.0/255.255.0.0 -p udp -m state --state NEW -m recent --update --seconds 5 --hitcount 20 --name UDPFLOOD --rsource -j DROP
    -A FORWARD -d 255.255.255.255 -j REJECT --reject-with icmp-port-unreachable
    -A FORWARD -s 255.255.255.255 -j REJECT --reject-with icmp-port-unreachable
    -A FORWARD -d 192.168.166.0/255.255.255.0 -j ACCEPT
    -A FORWARD -s 192.168.166.0/255.255.255.0 -j ACCEPT
    -A FORWARD -d 192.168.200.0/255.255.255.0 -j ACCEPT
    -A FORWARD -s 192.168.200.0/255.255.255.0 -j ACCEPT
    -A FORWARD -d 192.168.201.0/255.255.255.0 -j ACCEPT
    -A FORWARD -s 192.168.201.0/255.255.255.0 -j ACCEPT
    -A FORWARD -s 192.168.167.0/255.255.255.0 -j ACCEPT
    -A FORWARD -d 192.168.167.0/255.255.255.0 -j ACCEPT
    -A FORWARD -d 192.168.139.0/255.255.255.0 -j ACCEPT
    -A FORWARD -s 192.168.139.0/255.255.255.0 -j ACCEPT
    -A FORWARD -d 192.168.159.0/255.255.255.0 -j ACCEPT
    -A FORWARD -s 192.168.159.0/255.255.255.0 -j ACCEPT
    -A FORWARD -d 192.168.160.0/255.255.255.0 -j ACCEPT
    -A FORWARD -s 192.168.160.0/255.255.255.0 -j ACCEPT
    -A FORWARD -d 192.168.161.0/255.255.255.0 -j ACCEPT
    -A FORWARD -s 192.168.161.0/255.255.255.0 -j ACCEPT
    -A FORWARD -d 192.168.162.0/255.255.255.0 -j ACCEPT
    -A FORWARD -s 192.168.162.0/255.255.255.0 -j ACCEPT
    -A FORWARD -d 192.168.163.0/255.255.255.0 -j ACCEPT
    -A FORWARD -s 192.168.163.0/255.255.255.0 -j ACCEPT
    -A FORWARD -d 192.168.164.0/255.255.255.0 -j ACCEPT
    -A FORWARD -s 192.168.164.0/255.255.255.0 -j ACCEPT
    -A FORWARD -d 192.168.165.0/255.255.255.0 -j ACCEPT
    -A FORWARD -s 192.168.165.0/255.255.255.0 -j ACCEPT
    -A FORWARD -d 192.168.168.0/255.255.255.0 -j ACCEPT
    -A FORWARD -s 192.168.168.0/255.255.255.0 -j ACCEPT
    -A FORWARD -d 192.168.169.0/255.255.255.0 -j ACCEPT
    -A FORWARD -s 192.168.169.0/255.255.255.0 -j ACCEPT
    -A FORWARD -d 192.168.171.0/255.255.255.0 -j ACCEPT
    -A FORWARD -s 192.168.171.0/255.255.255.0 -j ACCEPT
    COMMIT
    # Completed on Thu Jun 16 11:19:28 2011
    # Generated by iptables-save v1.3.5 on Thu Jun 16 11:19:28 2011
    *nat
    :PREROUTING ACCEPT [6491:412207]
    :POSTROUTING ACCEPT [4:267]
    :OUTPUT ACCEPT [0:0]
    -A POSTROUTING -s 192.168.162.50 -o eth0.181 -j SNAT --to-source 46.16.226.34
    -A POSTROUTING -s 192.168.200.0/255.255.255.0 -o eth0.181 -j SNAT --to-source 109.70.185.30-109.70.185.31
    -A POSTROUTING -s 192.168.201.0/255.255.255.0 -o eth0.181 -j SNAT --to-source 109.70.185.30-109.70.185.31
    -A POSTROUTING -s 192.168.166.0/255.255.255.0 -o eth0.181 -j SNAT --to-source 109.70.185.30-109.70.185.31
    -A POSTROUTING -s 192.168.167.0/255.255.255.0 -o eth0.181 -j SNAT --to-source 109.70.185.24-109.70.185.29
    -A POSTROUTING -s 192.168.139.0/255.255.255.0 -o eth0.181 -j SNAT --to-source 46.16.226.32-46.16.226.39
    -A POSTROUTING -s 192.168.159.0/255.255.255.0 -o eth0.181 -j SNAT --to-source 46.16.226.32-46.16.226.39
    -A POSTROUTING -s 192.168.160.0/255.255.255.0 -o eth0.181 -j SNAT --to-source 46.16.226.32-46.16.226.39
    -A POSTROUTING -s 192.168.161.0/255.255.255.0 -o eth0.181 -j SNAT --to-source 46.16.226.32-46.16.226.39
    -A POSTROUTING -s 192.168.162.0/255.255.255.0 -o eth0.181 -j SNAT --to-source 46.16.226.32-46.16.226.39
    -A POSTROUTING -s 192.168.163.0/255.255.255.0 -o eth0.181 -j SNAT --to-source 46.16.226.32-46.16.226.39
    -A POSTROUTING -s 192.168.164.0/255.255.255.0 -o eth0.181 -j SNAT --to-source 46.16.226.32-46.16.226.39
    -A POSTROUTING -s 192.168.165.0/255.255.255.0 -o eth0.181 -j SNAT --to-source 46.16.226.32-46.16.226.39
    -A POSTROUTING -s 192.168.168.0/255.255.255.0 -o eth0.181 -j SNAT --to-source 46.16.226.32-46.16.226.39
    -A POSTROUTING -s 192.168.169.0/255.255.255.0 -o eth0.181 -j SNAT --to-source 46.16.226.32-46.16.226.39
    -A POSTROUTING -s 192.168.171.0/255.255.255.0 -o eth0.181 -j SNAT --to-source 46.16.226.32-46.16.226.39
    COMMIT
    # Completed on Thu Jun 16 11:19:28 2011

    [Ответить]

Оставить комментарий