NAT и iptables (Как раздать интернет через вторую сетевую карту)

Дано:
Сетевая карточка 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

Комментарии

Изображение пользователя yurmax.

ну если еще и ррр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

А у меня всё равно не работает... А что надо на XP , на который должен раздаваться Интернет , делать? Просто поставить ИП 192.168.0.2 , Шлюз 192.168.0.1, и такой же ДНС?

в ХР надо выставить все на автомат.

создал файлег, че-та ноут (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-адреса а доменные имена не пингуются. есть методы решений? я так понимаю на убунте придется днс-сервер настраивать.

Да, самое простое зовется dns-masq
Настраивается за 2 минуты, в среднем. :-)
заодно и будет выполнять функции дхцп сервера. :-)
если настроить, разумеется.

Изображение пользователя yurmax.

ЗЫ кидаем этот файлик с любым названием в /etc/network/if-up.d/

Изображение пользователя balamutick.

Затем включаем NAT
А как выключить NАТ ? Т.е. обратный процесс этому всему.

Т.е. понастраивал я это все себе правил в iptables понаписал, все прекрасно работало и ладно. А теперь "расшаривание интернета не требуется".

Как это всё потереть.

убери правило iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
и отключи форвардинг

Изображение пользователя balamutick.

В /proc/sys/net/ipv4/ip_forward прописанную еденичку я убрал.
убери правило iptables
Мне и нужно его убрать. Я не спрашиваю что (я спросил в вопросе)
А как выключить NАТ ? Я не знаю как убрать правило из 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 вероятно будет пустой. и его можно будет удалить

Изображение пользователя balamutick.

iptables -F - удаляет все правила

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 &lt; /etc/iptables.up.rules
Точнее, что значит тут pre-up, -пред запуск ?
$ man pre-up
No manual entry for pre-up

Изображение пользователя vimax.

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

Изображение пользователя zheny.

По этой команде echo 0 > /proc/sys/net/ipv4/ip_forward выдает вот это bash: /proc/sys/net/ipv4/ip_forward: Permission denied. Что делать не знаю. Пытался открыть этот файл, так он пустой.

Изображение пользователя picaro.

надо из под рута это делать

Изображение пользователя zheny.

надо из под рута это делать
То же самое сообщение выдает.

Изображение пользователя balamutick.

Значит, рут у вас не правильный !
Шутка :-) Permission denied - доступ запрещён. Почему, вероятно всё таки не из под рута делаете. Или по каким-то причинам, ему нельзя писать\читать в этот файл (но это вы должны были ручками, что-то трогать).

Изображение пользователя picaro.

Не из под sudo, а из под рута:
$ sudo su
# echo 0 > /proc/sys/net/ipv4/ip_forward

Изображение пользователя vimax.

"$ 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
и тд

Изображение пользователя vimax.

спасибо! не знал про перенаправление

Изображение пользователя vimax.

Конечно же это из под рута делается! Вы изменяете настройки ядра.
Настройки хранятся в /etc/sysctl.conf. Для их изменения используется утилита sysctl. И не нужно выдумывать новых путей.

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

sysctl -a

- посмотреть настройки только для одного параметра

sysctl net.ipv4.ip_forward (как всегда для продолжения названия параметра работает наш любимый TAB)

- изменить настройки

sudo sysctl net.ipv4.ip_forward=1

Ip_tables tutorial от PC Magazine (рус.)

ценный труд чувака во благо наше

Изображение пользователя Aule.

Выполнил все как тут сказано,но у меня все равно не работает мой бук с XP отказывается видеть "Подключение ограничено или отсутствует"Че делать то?

напишите в асю 559106132

Изображение пользователя urusha.

адрес вручную выставьте на хрюше...например 192.168.0.5 маска 255.255.255.0 шлюз 192.168.0.1 днс провайдера

если необходимо дать полный доступ в Инет только одному из локальных адресов, а все остальные должны работать через прокси (squid - установлен и работает) по HTTP ?

Изображение пользователя vimax.

Вам нужно настроить фаервол. Воспользуйтесь ufw. Это утилита для управления фаерволом. Сделана специально, чтобы облегчить настройку. Она переводит простые команды в iptables стиль и автоматом их вписывает туда. Почитайте на сайте хелпа убунты, там все очень хорошо описано.
Вам понадобиться включить маскарадинг, чтобы выпускать адреса напрямую. А потом с помощью правил запретить всем доступ к http порту, кроме одного. А стандартный порт сквида (3128) при этом останется открытым. Я так выпускаю компы бухгалтеров с их клиент-банками в инет... Через проксю не работают

Изображение пользователя urusha.

man squid.conf, или как-то так. Опишите вашу ситуацию по подробнее (с прокси не по теме пишете).

Изображение пользователя salt.

Отличная статья про iptables, ufw, маскарадинг
Сам к ней очень часто обращаюсь
http://mirspo.narod.ru/firewall.html
и тут тоже много полезного:
http://www.ab-log.ru/smart-house/linux/source-routing
Раздача интернета

Изображение пользователя sg-333.

Насколько я понял, если я буду таким способом раздавать интернет по wifi то подключиться к сети сможет кто угодно?

Изображение пользователя Fatalist.

Тут зависит от того, как ты точку создаёшь. С паролем или без, с DHCP сервером или без него. Допустим, я создавал точку с паролем и в настройках dhcp сервера указывал, из какого диапазона раздавать адреса. А можно сделать, чтобы адреса автоматом выдавались только для определённых MAC'ов. В общем, много всяких удобств. создавай точку с паролем и тогда можешь быть более-менее спокоен за свой инет)

Пробую обоими способами и ни чего не выходит. На компе с win7 ни в какую не хочет инет появляться. Пишет "неопознаная сеть без доступа к интеренету".

ifconfig:

Развернуть/свернуть скрытый текст.

eth0      Link encap:Ethernet  HWaddr 00:15:f2:4f:0d:1d
          inet addr:94.76.120.140  Bcast:94.76.120.255  Mask:255.255.255.0
          inet6 addr: fec0::8:215:f2ff:fe4f:d1d/64 Диапазон:Сайт
          inet6 addr: 2002:5e4c:78be:8:215:f2ff:fe4f:d1d/64 Диапазон:Общий
          inet6 addr: fe80::215:f2ff:fe4f:d1d/64 Диапазон:Ссылка
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:54955 errors:0 dropped:0 overruns:0 frame:0
          TX packets:30978 errors:0 dropped:0 overruns:0 carrier:0
          коллизии:0 txqueuelen:1000
          RX bytes:63081559 (63.0 MB)  TX bytes:3139094 (3.1 MB)
          Прервано:18

eth1      Link encap:Ethernet  HWaddr 00:15:f2:4f:14:f3
          inet addr:192.168.0.1  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::215:f2ff:fe4f:14f3/64 Диапазон:Ссылка
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:405 errors:0 dropped:0 overruns:0 frame:0
          TX packets:441 errors:0 dropped:0 overruns:0 carrier:0
          коллизии:0 txqueuelen:1000
          RX bytes:32040 (32.0 KB)  TX bytes:54867 (54.8 KB)
          Прервано:23 Base address:0xc000

lo        Link encap:Локальная петля (Loopback)
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Диапазон:Узел
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:30 errors:0 dropped:0 overruns:0 frame:0
          TX packets:30 errors:0 dropped:0 overruns:0 carrier:0
          коллизии:0 txqueuelen:0
          RX bytes:1998 (1.9 KB)  TX bytes:1998 (1.9 KB)


iptables:
Развернуть/свернуть скрытый текст.

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere            state NEW

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere
REJECT     all  --  anywhere             anywhere            reject-with icmp-port-unreachable
REJECT     all  --  anywhere             anywhere            reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination


На win7 настроенно:
Развернуть/свернуть скрытый текст.

IP:   192.168.0.2
Mask: 255.255.255.0
Шлюз: 192.168.0.1
DNS:  192.168.0.1


Проверил: /proc/sys/net/ipv4/ip_forward записанно 1
Также в /etc/sysctl.conf имеется строчка: net.ipv4.ip_forward=1
Где я туплю?

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

Изображение пользователя vimax.

Помнится, мешал мне NetworkManager все это добро делать. Я его отключал.
Свои сервера на работе я превращаю в шлюз как описано тут, раздел "ufw Masquerading".
Но это серверная версия. Без всяких "наворотов".

Настроил... только не совсем разобрался где именно была проблема. Как пойму что к чему - напишу. :)

Изображение пользователя get_sux.

А у меня после этих настроек вырубился bluetooth (в трее серая иконка горит), кто знает как вернуть его?)