Дано:
Сетевая карточка 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
Комментарии (68)
ну если еще и ррр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-up
No 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=1
Ip_tables tutorial от PC Magazine (рус.)
ценный труд чувака во благо наше
Выполнил все как тут сказано,но у меня все равно не работает мой бук с XP отказывается видеть "Подключение ограничено или отсутствует"Че делать то?
напишите в асю 559106132
адрес вручную выставьте на хрюше...например 192.168.0.5 маска 255.255.255.0 шлюз 192.168.0.1 днс провайдера
если необходимо дать полный доступ в Инет только одному из локальных адресов, а все остальные должны работать через прокси (squid - установлен и работает) по HTTP ?
Вам нужно настроить фаервол. Воспользуйтесь ufw. Это утилита для управления фаерволом. Сделана специально, чтобы облегчить настройку. Она переводит простые команды в iptables стиль и автоматом их вписывает туда. Почитайте на сайте хелпа убунты, там все очень хорошо описано.
Вам понадобиться включить маскарадинг, чтобы выпускать адреса напрямую. А потом с помощью правил запретить всем доступ к http порту, кроме одного. А стандартный порт сквида (3128) при этом останется открытым. Я так выпускаю компы бухгалтеров с их клиент-банками в инет... Через проксю не работают
Можно подробнее про маскарадинг. Точно такая же ситуация, нужно пробросить бухгалтеров мимо прокси сервера. Можете дать подробную инструкцию для чайника. Систему поднимал не я, теперь приходится разбираться самому. Буду признателен за помощь.
сложно подробнее чем уже рассказано, но можно.
iptables -t nat -A POSTROUTING -s 192.168.0.1 -o eth1 -j MASQUERADE
у меня так.
еще можно так
iptables -t nat -A POSTROUTING -s 192.168.46.0/24 -d 195.ххх.хх.хх -o eth1 -j MASQUERADE
если известен ип адрес сервера банка
вариантов много..
/sbin/iptables -t nat -A POSTROUTING -m multiport -p tcp --destination-ports 7002 -s 192.168.0.хх -d хх.хх.хх.84 -o vlan00 -j SNAT --to-source 81.хх.ххх.хх
это реально работающее правило для одного из банков.
где
--destination-ports 7002
порт банка-s 192.168.0.хх
ип бухмашины-d хх.хх.хх.84
ип банка-o vlan00
интерфейс выхода в интернет--to-source 81.хх.ххх.хх
внешний ип интерфейса выходаЭта схема работает независимо от алиасов, адресов, и прочего (но все адреса, интерфейсы и порты должны быть реально существующими)
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 отеля и т.п.).