Дано:
Сетевая карточка eth0 подключенная с помощью PPPoE к интернету и
eth1 подключенная к сети с адресом 192.168.0.1 к которой подключена сеть с адресами 192.168.0.* в которой нужно раздать интернет.
Для начала включим форвардинг:
echo 1 > /proc/sys/net/ipv4/ip_forward
Чтобы форвардинг автоматически включался при запуске системы
Открываем файл:
sudo nano /etc/sysctl.conf
и добавляем в него строчку:
net.ipv4.ip_forward = 1
Затем включаем NAT
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
Где ppp0 название вашего интерфейса через который выходите в интернет.
Чтобы NAT работал после перезагрузки делаем следующее:
сохраняем настройки iptables в файл
sudo iptables-save > /etc/iptables.up.rules
И добавляем в конец файла:
sudo nano /etc/networks/interfaces
эту строчку, для автоматической подгрузке правил
pre-up iptables-restore < /etc/iptables.up.rules
Так же в этот файл добавляем правила роутинга:
up route add -net 192.168.0.0 netmask 255.255.255.0 dev eth1
up route add -net 0.0.0.0 netmask 255.255.255.255 dev eth0

Комментарии (66)
ну если еще и ррр0...
тогда так
#!/bin/sh
PATH=/usr/sbin:/sbin:/bin:/usr/bin
#
# delete all existing rules.
#
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
# Always accept loopback traffic
iptables -A INPUT -i lo -j ACCEPT
# Allow established connections, and those not coming from the outside
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -i ! ppp0 -j ACCEPT
iptables -A FORWARD -i ppp0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allow outgoing connections from the LAN side.
iptables -A FORWARD -i eth1 -o ppp0 -j ACCEPT
# Masquerade.
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
# Don't forward from the outside to the inside.
iptables -A FORWARD -i ppp0 -o ppp0 -j REJECT
iptables -A FORWARD -i eth0 -o ppp0 -j REJECT
# Enable routing.
echo 1 > /proc/sys/net/ipv4/ip_forward
создал файлег, че-та ноут (WinXP)у меня не может подключиться к сети - адрес не назначается,
в командной строке вот чего:
stranger@stranger-desktop:~$ sudo su
[sudo] password for stranger:
root@stranger-desktop:/home/stranger# sh /etc/network/if-up.d/routing.shUsing intrapositioned negation (`--option ! this`) is deprecated in favor of extrapositioned (`! --option this`).
root@stranger-desktop:/home/stranger# sh /etc/network/if-up.d/routing.sh start
Using intrapositioned negation (`--option ! this`) is deprecated in favor of extrapositioned (`! --option this`).
Скрипт вот он:
#!/bin/sh
PATH=/usr/sbin:/sbin:/bin:/usr/bin
#
# delete all existing rules.
#
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
# Always accept loopback traffic
iptables -A INPUT -i lo -j ACCEPT
# Allow established connections, and those not coming from the outside
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -i ! tap0 -j ACCEPT
iptables -A FORWARD -i tap0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allow outgoing connections from the LAN side.
iptables -A FORWARD -i eth1 -o tap0 -j ACCEPT
# Masquerade.
iptables -t nat -A POSTROUTING -o tap0 -j MASQUERADE
# Don't forward from the outside to the inside.
iptables -A FORWARD -i tap0 -o tap0 -j REJECT
iptables -A FORWARD -i eth0 -o tap0 -j REJECT
# Enable routing.
echo 1 > /proc/sys/net/ipv4/ip_forward
интернет - на интерфейсе tap0
Спасибо за пост, очень помог
А что ещё прописать в правило, чтобы помимо конкретного интерфейса ещё и через конкретный IP адрес NAT илось ?
Тогда использовать SNAT вместо MASQUERADE
-j SNAT --to-source $ipПравда, если у тебя ip динамический то тебе придется каждый раз переписывать сие правило.
Не, статичный. Я чуть позже попробую, отпишусь.
ЗЫ кидаем этот файлик с любым названием в /etc/network/if-up.d/
А как выключить NАТ ? Т.е. обратный процесс этому всему.
Т.е. понастраивал я это все себе правил в iptables понаписал, все прекрасно работало и ладно. А теперь "расшаривание интернета не требуется".
Как это всё потереть.
убери правило iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
и отключи форвардинг
В /proc/sys/net/ipv4/ip_forward прописанную еденичку я убрал.
Мне и нужно его убрать. Я не спрашиваю что (я спросил в вопросе)
Я не знаю как убрать правило из iptables, и понятное дело man iptables, но потратить 2-3 часа(и не 100%-но что пойму) для одной команды...
Вообщем спрашиваю вопрос однозначно:
Какую команду дать, чтобы из настроек iptables удалить выше прописанные изменения.
Как вариант, вернуть все к исходному состоянию, как например при свежеустановленной кубунте.
ну её маё
из консоли: echo 0 > /proc/sys/net/ipv4/ip_forward
из консоли: sudo nano /etc/sysctl.conf
удаляем строку: net.ipv4.ip_forward = 1
из консоли: sudo iptables -F
из консоли: sudo iptables-save > /etc/iptables.up.rules
sudo nano /etc/networks/interfaces - удаляем строки
pre-up iptables-restore < /etc/iptables.up.rules
up route add -net 192.168.0.0 netmask 255.255.255.0 dev eth1
up route add -net 0.0.0.0 netmask 255.255.255.255 dev eth0
все :) это я тупо проделал все действия наоборот :)
iptables -F - удаляет все правила
в итоге будет как свежей кубунте.
файл /etc/iptables.up.rules вероятно будет пустой. и его можно будет удалить
man iptables-F, --flush [chain]
Flush the selected chain (all the chains in the table if none is given). This is equivalent to deleting all the rules one by one.
Как я при беглом чтении не заметил подчёркнутую строку...
Что делает эта строка ? Восстанавливает iptables ?
pre-up iptables-restore < /etc/iptables.up.rulesТочнее, что значит тут pre-up, -пред запуск ?
$ man pre-upNo manual entry for pre-up
pre-up, post-up, pre-down, post-down - очень интересные штуки. Они указывают какие команды нужно запустить до, после включения и отключения интерфейсов.
Например, после поднятия ppp0 можно организовать чтобы автоматом включилась аська, торент начал докачивать порево, амарок включил музон.... ну я думаю мысля ясна.
p.s.
iptables-save - выводит текущие правила фаервола на стандартный вывод: на экран (название обманчивое. эта команда ничего нигде не сохраняет). Сохранять нужно "вручную": сохранить текущие настройки фаера в файл (iptables-save >> /etc/MySuperRules) и потом восстановить их (iptables-restore << /etc/MySuperRules) . После перезагрузки системы, настройки фаера обнуляются и чтобы постоянно не вбивать команды в консоли их впихивают в автозагрузку (правильнее конечно в interfaces pre-up или post-up).
p.s.
А man нужно смотреть не для pre-up, а для interfaces
По этой команде echo 0 > /proc/sys/net/ipv4/ip_forward выдает вот это bash: /proc/sys/net/ipv4/ip_forward: Permission denied. Что делать не знаю. Пытался открыть этот файл, так он пустой.
надо из под рута это делать
То же самое сообщение выдает.
Значит, рут у вас не правильный !
Шутка :-) Permission denied - доступ запрещён. Почему, вероятно всё таки не из под рута делаете. Или по каким-то причинам, ему нельзя писать\читать в этот файл (но это вы должны были ручками, что-то трогать).
Не из под sudo, а из под рута:
$ sudo su# echo 0 > /proc/sys/net/ipv4/ip_forward
"$ sudo command " и "# command" это одно и то же
# command и $ sudo command Это конечто одно и тоже. Но когда делается перенаправдение вывода (">") то оно делается с правами основного пользователя
То есть когда делаешь sudo echo 0 > /proc/sys/net/ipv4/ip_forward то собственно отоборажение единички происходит от рута, а вот помещение ее в файл - от обычного пользователя. По этому и недостаточно прав.
А решить это можно несколькими способами:
sudo su -c "echo 0 > /proc/sys/net/ipv4/ip_forward"
echo 0 > sudo tee /proc/sys/net/ipv4/ip_forward
и тд
спасибо! не знал про перенаправление
Конечно же это из под рута делается! Вы изменяете настройки ядра.
Настройки хранятся в /etc/sysctl.conf. Для их изменения используется утилита sysctl. И не нужно выдумывать новых путей.
- посмотреть все настройки
sysctl -a- посмотреть настройки только для одного параметра
sysctl net.ipv4.ip_forward(как всегда для продолжения названия параметра работает наш любимый TAB)- изменить настройки
sudo sysctl net.ipv4.ip_forward=1Ip_tables tutorial от PC Magazine (рус.)
ценный труд чувака во благо наше
Выполнил все как тут сказано,но у меня все равно не работает мой бук с XP отказывается видеть "Подключение ограничено или отсутствует"Че делать то?
напишите в асю 559106132
адрес вручную выставьте на хрюше...например 192.168.0.5 маска 255.255.255.0 шлюз 192.168.0.1 днс провайдера
если необходимо дать полный доступ в Инет только одному из локальных адресов, а все остальные должны работать через прокси (squid - установлен и работает) по HTTP ?
Вам нужно настроить фаервол. Воспользуйтесь ufw. Это утилита для управления фаерволом. Сделана специально, чтобы облегчить настройку. Она переводит простые команды в iptables стиль и автоматом их вписывает туда. Почитайте на сайте хелпа убунты, там все очень хорошо описано.
Вам понадобиться включить маскарадинг, чтобы выпускать адреса напрямую. А потом с помощью правил запретить всем доступ к http порту, кроме одного. А стандартный порт сквида (3128) при этом останется открытым. Я так выпускаю компы бухгалтеров с их клиент-банками в инет... Через проксю не работают
man squid.conf, или как-то так. Опишите вашу ситуацию по подробнее (с прокси не по теме пишете).
Отличная статья про iptables, ufw, маскарадинг
Сам к ней очень часто обращаюсь
http://mirspo.narod.ru/firewall.html
и тут тоже много полезного:
http://www.ab-log.ru/smart-house/linux/source-routing
Раздача интернета
Насколько я понял, если я буду таким способом раздавать интернет по wifi то подключиться к сети сможет кто угодно?
Тут зависит от того, как ты точку создаёшь. С паролем или без, с DHCP сервером или без него. Допустим, я создавал точку с паролем и в настройках dhcp сервера указывал, из какого диапазона раздавать адреса. А можно сделать, чтобы адреса автоматом выдавались только для определённых MAC'ов. В общем, много всяких удобств. создавай точку с паролем и тогда можешь быть более-менее спокоен за свой инет)
iptables -t nat -L -n что показывает?
iptables -t nat -L -n
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
DNS включите, либо пропишите днс провайдера
Помнится, мешал мне NetworkManager все это добро делать. Я его отключал.
Свои сервера на работе я превращаю в шлюз как описано тут, раздел "ufw Masquerading".
Но это серверная версия. Без всяких "наворотов".
Настроил... только не совсем разобрался где именно была проблема. Как пойму что к чему - напишу. :)
А у меня после этих настроек вырубился bluetooth (в трее серая иконка горит), кто знает как вернуть его?)
пишет такую ошибку
bash: /proc/sys/net/ipv4/ip_forward: Отказано в доступе
нужно от рута менять настройки. выше я уже писал.
делайте так
sudo sysctl net.ipv4.ip_forward=1
Добавлю, все наверное это знают, но я только недавно нарыл. Если вы ловите чужой халявный вай-фай и раздаете себе на комп (как это делаю я), то что бы узнать какой адрес DNS вбить на компе наберите под линуксом команду
cat /etc/resolv.confи уведите
Пиши днсы гугла и будет тебе счастье везде.
... или любые открытые
... или ставь бинд и не парься...
По моему, сие уже перебор. Хотя как вариант решение радикальное.
С недавних пор(а точнее, с лета) так и делаю.
А кто будет бинду форвардерс настраивать? :-)
я в сетях меньше 20 машин ставлю dns-masq он проще в понимании и менее избыточен.
Да и как дхцп-сервер для маленькой локалки - очень хорош, включить нужно только...
Да разумеется, настройка внешнего/ведущего днс-сервера здесь тоже нужна... :-)
А, да, чтоб не рассказывали, что бинд не умею/не люблю...
У меня сейчас висит в рабочей сети 5 биндов. два для сайтов, три для внутренних задач.
На 5 разных машинах. Но у меня и сеть из 15 разного размера сегментов.
Люди, а если у нас "tap0" это интерфейс для подключения через VPN. Как цитируемая строчка должна выглядеть ?
А eth0:5 - интерфейс сервера с нужным IP для выхода через него в интернет.
Суть такая. Подключаемся через защищённое VPN подключение к серверу, и уже через это VPN подключение(через сервер) и выходим в интернет.
Нужно например, для подключения в ненадёжных местах(ХСВ, интернет кафе, wi-fi отеля и т.п.).
Лучше вывод
ip a
ip r
А там будем дальше двигаться.