The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"NAT на linux с одним сетевым интерфейсом"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [ Отслеживать ]

"NAT на linux с одним сетевым интерфейсом"  
Сообщение от GaDiNa (ok) on 18-Мрт-09, 15:16 
Доброго времени суток.

В сети 192.168.0.0/24 есть комп linux с openSUSE 11.

linux:# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:16:3E:02:2A:8C
          inet addr:192.168.0.2  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3581483 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5154283 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:3658642571 (3489.1 Mb)  TX bytes:4061930207 (3873.7 Mb)

# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.0.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
127.0.0.0       0.0.0.0         255.0.0.0       U         0 0          0 lo
0.0.0.0         192.168.0.10     0.0.0.0         UG        0 0          0 eth0

192.168.0.10 - это ADSL модем в режиме роутера.

Поставил на linux squid+squidGuard в transparent mode
Включил forwarding и в iptables прописал:

#Redirect HTTP to SQUID
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

При этом если на другом компе указать в качестве шлюза IP-шник linux, то можно пользоваться браузером.

Но этого маловато, хочу сделать полноценный NAT на linux, чтобы для локальных машин доступ был не только в WEB.

Пока нашел мануалы как настроить NAT на роутере с двумя сетевыми картами, одна из которых смотрит в локальную сеть, а вторая - в Интернет.
Но у меня другая ситуация - карточка тока одна.
Поэтому прошу совета - как мне настроить NAT в моей ситуации.

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "NAT на linux с одним сетевым интерфейсом"  
Сообщение от wertik (ok) on 18-Мрт-09, 15:29 
>[оверквотинг удален]
>то можно пользоваться браузером.
>
>Но этого маловато, хочу сделать полноценный NAT на linux, чтобы для локальных
>машин доступ был не только в WEB.
>
>Пока нашел мануалы как настроить NAT на роутере с двумя сетевыми картами,
>одна из которых смотрит в локальную сеть, а вторая - в
>Интернет.
>Но у меня другая ситуация - карточка тока одна.
>Поэтому прошу совета - как мне настроить NAT в моей ситуации.

man iptables
find POSTROUTING
find masquerade
)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "NAT на linux с одним сетевым интерфейсом"  
Сообщение от GaDiNa (ok) on 18-Мрт-09, 15:33 
если не трудно - то напишите пример.
у меня пока не получается разобраться самому.. потому и написал сюда.

сбивает с толку что у меня и на ADSL модеме тоже ведь стоит NAT. Получается я хочу поставить перед ним еще один.
А про опцию MASQUERADE вобще вычитал что она должна использоваться только в случае с динамическим IP:
MASQUERADE
This target is only valid in the nat table, in the POSTROUTING chain. It should only be used with dynamically assigned IP (dialup) connections: if you have a  static IP  address,  you should use the SNAT target.

Вот и хочу узнать - как бы сделали в этом случае знающие люди..

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "NAT на linux с одним сетевым интерфейсом"  
Сообщение от wertik (ok) on 18-Мрт-09, 15:48 
>[оверквотинг удален]
>А про опцию MASQUERADE вобще вычитал что она должна использоваться только в
>случае с динамическим IP:
>MASQUERADE
>This target is only valid in the nat table, in the POSTROUTING
>chain. It should only be used with dynamically assigned IP (dialup)
>connections: if you have a  static IP  address,  
>you should use the SNAT target.
>
>Вот и хочу узнать - как бы сделали в этом случае знающие
>люди..

http://www.opennet.me/docs/RUS/iptables/#MASQUERADETARGET

Знающие , использовали бы заранее подготовленные скрипты. )

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "NAT на linux с одним сетевым интерфейсом"  
Сообщение от GaDiNa (ok) on 18-Мрт-09, 15:53 
>http://www.opennet.me/docs/RUS/iptables/#MASQUERADETARGET
>
>Знающие , использовали бы заранее подготовленные скрипты. )

спасибо. это я тоже уже читал..
вот что у меня сейчас - скопировал почти все откудато с инета и поправил, кстати, благодаря вашей наводке на man iptables ).

# cat /etc/iptables.sh
#!/bin/sh
PATH=/usr/sbin:/sbin:/bin:/usr/bin
#
# Delete all rules
#
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
# Always accept the traffic on the loopback-interface
iptables -A INPUT -i lo -j ACCEPT

# Masquerade.
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

#Redirect HTTP to SQUID
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

работает в принципе.. делает то что хотелось.. но както.. не нравится мне..
разве так должна выглядеть таблица правил iptables ?

Опять же, непонятно осталось с маскарадингом и динамическими IP. Вроде для моего случая man советует SNAT.. Или я чтото не так понял.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "NAT на linux с одним сетевым интерфейсом"  
Сообщение от GaDiNa (ok) on 18-Мрт-09, 16:07 
и еще есть один вопрос:
каким правилом я могу запрещать доступ к этому "недо-NAT" для выбранного локального IP ?
но при этом, чтобы WEB через squid у него продолжал работать..
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "NAT на linux с одним сетевым интерфейсом"  
Сообщение от AdVv (??) on 19-Мрт-09, 02:11 
>и еще есть один вопрос:
>каким правилом я могу запрещать доступ к этому "недо-NAT" для выбранного локального
>IP ?
>но при этом, чтобы WEB через squid у него продолжал работать..

А может вам таки следует настроить НАТ на АДСЛ рутере ? Или купить пачкорд и сетевушку, и сделать из линукса нормальный гейтвэй, а не кхм... даже и не знаю как ЭТО назвать.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "NAT на linux с одним сетевым интерфейсом"  
Сообщение от GaDiNa (ok) on 19-Мрт-09, 17:16 
>А может вам таки следует настроить НАТ на АДСЛ рутере ? Или
>купить пачкорд и сетевушку, и сделать из линукса нормальный гейтвэй, а
>не кхм... даже и не знаю как ЭТО назвать.

NAT на ADSL есть. Но настройки в его WEB-интерфейсе весьма ограничены, а то, что можно сделать в iptables через консоль - после рестарта не сохраняется.
А так - обязательно приму все к сведению и в ближайшем будущем переделаю все нормально.

И на данный момент вроде решил свои вопросы так:

#
# Delete all rules
#
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
# Always accept the traffic on the loopback-interface
iptables -A INPUT -i lo -j ACCEPT

# Full access.
iptables -A FORWARD -s 192.168.0.100 -j ACCEPT

# Allow access from LAN network to external Internet services.
iptables -A FORWARD -s 192.168.0.0/24 -p tcp --dport 110 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -p tcp --dport 25 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -p tcp --dport 443 -j ACCEPT

# Disable access from LAN-network to external networks.
# ping
iptables -A FORWARD -s 192.168.0.0/24 -j REJECT
# HTTP
#iptables -A INPUT -s 192.168.0.0/24 -j REJECT

# ############### NAT ###############
# Masquerade.
#iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# Or SNAT.
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to-source 192.168.0.2
# ###################################

#Redirect HTTP to SQUID
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

таким образом все с локальной сети могут бродить по WEB за счет squid (https - через NAT)
и пользоваться внешними сервисами POP3 и SMTP.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "NAT на linux с одним сетевым интерфейсом"  
Сообщение от GaDiNa (ok) on 30-Мрт-09, 23:04 
есть одна проблема..
выходит у меня для выхода в инет, пакеты с локальной сети проходят ДВА NAT-а...
один на linux, второй на ADSL модеме.

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "NAT на linux с одним сетевым интерфейсом"  
Сообщение от GaDiNa (ok) on 30-Мрт-09, 23:37 
немного разобрался

# Disable access from LAN-network to external networks.
# ping
iptables -A FORWARD -s 192.168.0.0/24 -j REJECT

если закоментировать эту строку - то проблемный сайт открывается.

но я ее добавил для того чтобы с локальной сети не было доступа к инету через НАТ через все порты кроме 110, 25 и 443.. видимо я закрыл какой-то нужный порт, раз при этом правиле не работает https на один URL (я подозреваю что могут быть и другие..)

вот что показывает iptables -nL

# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

ACCEPT     tcp  --  192.168.0.0/24       0.0.0.0/0           tcp dpt:110
ACCEPT     tcp  --  192.168.0.0/24       0.0.0.0/0           tcp dpt:25
ACCEPT     tcp  --  192.168.0.0/24       0.0.0.0/0           tcp dpt:443
REJECT     all  --  192.168.0.0/24       0.0.0.0/0           reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination


возможно дело в этом "eject-with icmp-port-unreachable" ?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

11. "NAT на linux с одним сетевым интерфейсом"  
Сообщение от сабакка on 30-Мрт-09, 23:59 
да, SNAT вам нужен :) но и маскарадинг работает :)
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

10. "NAT на linux с одним сетевым интерфейсом"  
Сообщение от сабакка on 30-Мрт-09, 23:58 
а чем плохо если линукс работает как рутер - просто пересылает пакеты на АДСЛ рутер? зачем второй нат?
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

12. "NAT на linux с одним сетевым интерфейсом"  
Сообщение от GaDiNa (ok) on 31-Мрт-09, 08:40 
>а чем плохо если линукс работает как рутер - просто пересылает пакеты
>на АДСЛ рутер? зачем второй нат?

на linux также работает squid, и хочется более гибко управлять доступом к инету из локалки.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

15. "NAT на linux с одним сетевым интерфейсом"  
Сообщение от сабакка on 31-Мрт-09, 11:05 
>>а чем плохо если линукс работает как рутер - просто пересылает пакеты
>>на АДСЛ рутер? зачем второй нат?
>
>на linux также работает squid, и хочется более гибко управлять доступом к
>инету из локалки.

что именно вам надо от "более гибко управлять доступом к инету" и что требует двойного нат'а?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

13. "NAT на linux с одним сетевым интерфейсом"  
Сообщение от daevy on 31-Мрт-09, 10:02 
имхо проще, на linux-тачке оставить squid и не парить мозги с iptables'ами, причины следующие:
ограничивать доступ в веб, можно средствами сквида (acl)
какой в этом смысл в НАТе??? ведь сквид пересылает запросы в инет, подставляя свой собственный адрес.
Вобще почитайте зачем и для чего нужен НАТ.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

14. "NAT на linux с одним сетевым интерфейсом"  
Сообщение от mikra on 31-Мрт-09, 11:00 
>Но этого маловато, хочу сделать полноценный NAT на linux, чтобы для локальных машин доступ был не только в WEB
>какой в этом смысл в НАТе??? ведь сквид пересылает запросы в инет,
>подставляя свой собственный адрес.
>Вобще почитайте зачем и для чего нужен НАТ.

йад в студию :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

16. "NAT на linux с одним сетевым интерфейсом"  
Сообщение от GaDiNa (ok) on 31-Мрт-09, 12:42 
Коллеги !
Спасибо вам за ваши советы и предложения как лучше можно сделать в моем случае.
В будущем я обязательно все переделаю в другом виде. Как минимум добавлю второй интерфейс.
А сейчас я хочу разобраться именно в этой, текущей проблеме.

Мне кажеться картина совершенно прозрачная. Я уже описывал этот участок сети, попробую еще раз, другими словами и проще:
Есть свич, в него подключен ADSL модем (router mode), linux server (одна сетевуха - 192.168.0.2) и  несколько рабочих компов (локальная сеть). Сеть - 192.168.0.0/24
на linux стоит squid+статистика. Squid в прозрачном режиме.
Я хочу чтобы рабочие компы ходили в инет через linux сервер.
для этого на linux включена маршрутизация и добавлены правила iptables:

# vi /etc/iptables.sh
#!/bin/sh
PATH=/usr/sbin:/sbin:/bin:/usr/bin
# очистка старых правил
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
# Always accept the traffic on the loopback-interface
iptables -A INPUT -i lo -j ACCEPT

# принимать все пакеты со стороны локальной сети для выбранного IP
iptables -A FORWARD -s 192.168.0.112 -j ACCEPT

# доступ к pop3, smtp и https из локальной сети
iptables -A FORWARD -s 192.168.0.0/24 -p tcp --dport 110 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -p tcp --dport 25 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -p tcp --dport 443 -j ACCEPT

# Закрыть доступ из локальной сети на все остальные порты
# ping
iptables -A FORWARD -s 192.168.0.0/24 -j REJECT

# Закрыть доступ из локальной сети для пакетов от сервиса Squid
# HTTP
#iptables -A INPUT -s 192.168.0.0/24 -j REJECT

# пример: полностью закрыть доступ в инет для 192.168.0.117
#iptables -A FORWARD -s 192.168.0.117 -d 0.0.0.0/0 -j REJECT
#iptables -A INPUT -s 192.168.0.117 -j REJECT

# ############### NAT ###############
# Masquerade.
#iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# Or SNAT.
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to-source 192.168.0.2
# ###################################

#Redirect HTTP to SQUID
iptables -t nat -A PREROUTING -i eth0 -p tcp -d ! 192.168.0.2 --dport 80 -j REDIRECT --to-port 3128
# ###################################

Таким образом я получил на linux NAT + правило для пакетов с портом назначени = 80, которое заворачивает эти пакеты на локальный интерфейс:порт 3128б на котором слушает squid - локальный демон.
Правильно ? Или нет ?
Видимо не совсем правильно все написано, потому что с локальной сети не открывается один сайт по https. Ошибка в таймауте.
!НО! только я  убираю вот эту строку:

# Закрыть доступ из локальной сети на все остальные порты
# ping
iptables -A FORWARD -s 192.168.0.0/24 -j REJECT

сайт начинает работать ! Следовательно проблема не в том, что в цепочке ДВА NAT-а и не в редиректе на порт 3128 http запросов (это ведь https запрос и он, в случае, когда squid работает в прозрачном (transparent)режиме, проходит через NAT, а не через squid)
Проблема в чем то другом...  наверно когда я убираю эту строку - я открываю полный доступ через NAT для всей сети, и при этом какие-то "пакетики" от компа на котором открывается неработающий https сайт пропускаются в инет и все работает.

но я НЕ хочу, чтобы у локальных компов был ПОЛНЫЙ доступ к инету через этот NAT.
поэтому я снова добавляю строку

# Закрыть доступ из локальной сети на все остальные порты
# ping
iptables -A FORWARD -s 192.168.0.0/24 -j REJECT

и пытаюсь открыть ПОЛНЫЙ доступ только для отдельного IP-адреса, скажем 192.168.0.112

# принимать все пакеты со стороны локальной сети для выбранного IP
iptables -A FORWARD -s 192.168.0.112 -j ACCEPT

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

17. "NAT на linux с одним сетевым интерфейсом"  
Сообщение от daevy on 31-Мрт-09, 12:46 
да ты сбрось все фаерфольные правила, и очисти нат-цепочки, и форвардинг выключи, у тебя фильтроваться все будет средствами сквида. Просто неправильно использовать 2 средства когда можно обойтись одним, т.е. сквидом. Извини но ты сам себе жизнь усложняешь.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

18. "NAT на linux с одним сетевым интерфейсом"  
Сообщение от GaDiNa (ok) on 31-Мрт-09, 12:54 
>да ты сбрось все фаерфольные правила, и очисти нат-цепочки, и форвардинг выключи,
>у тебя фильтроваться все будет средствами сквида. Просто неправильно использовать 2
>средства когда можно обойтись одним, т.е. сквидом. Извини но ты сам
>себе жизнь усложняешь.

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

или я не правильно тебя понял ?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

19. "NAT на linux с одним сетевым интерфейсом"  
Сообщение от daevy on 31-Мрт-09, 13:18 
>- на рабочих компах надо будет вручную настраивать прокси сервер в браузере,
>в аське и в подобных программах.

это придется делать в любом случае, кроме тех когда прокси сервис (именно сервис) находится на шлюзе по умолчанию. (Представь ситуацию, Вася с компа обращается на ya.ru сначала идет запрос на днс сервер, указанный у васи, днс сервер если он находится в этой же локалке, возвращает адрес 213.180.204.8, браузер васи пупкина, ни чего незнает про сеть 213.180.204. и отправит запрос на шлюз по умолчанию. т.е. мимо прокси. Вывод если прокси и шлюз не находятся на одном ip адресе, то ip адрес прокси обязательно придется указывать в браузере у клиента)

>- почтовые клиенты сотрудников перестанут работать.
>- пропадет удобство

почтовые клиенты работаю точно также, как и браузер, и в сквиде по дефолту проксирование почтовых протоколов не выполняется.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

20. "NAT на linux с одним сетевым интерфейсом"  
Сообщение от GaDiNa (ok) on 31-Мрт-09, 13:38 

>это придется делать в любом случае, кроме тех когда прокси сервис (именно
>сервис) находится на шлюзе по умолчанию.

дык так и есть!
squid тоже на этом шлюзе !

# Or SNAT.
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to-source 192.168.0.2
# ###################################

#Redirect HTTP to SQUID
iptables -t nat -A PREROUTING -i eth0 -p tcp -d ! 192.168.0.2 --dport 80 -j REDIRECT --to-port 3128

я думал это понятно...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

21. "NAT на linux с одним сетевым интерфейсом"  
Сообщение от daevy on 31-Мрт-09, 13:41 
>[оверквотинг удален]
># Or SNAT.
>iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to-source
>192.168.0.2
># ###################################
>
>#Redirect HTTP to SQUID
>iptables -t nat -A PREROUTING -i eth0 -p tcp -d ! 192.168.0.2
>--dport 80 -j REDIRECT --to-port 3128
>
>я думал это понятно...

а adsl модем какую роль играет?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

22. "NAT на linux с одним сетевым интерфейсом"  
Сообщение от сабакка on 31-Мрт-09, 13:53 
iptables -A FORWARD -s 192.168.0.0/24 -j REJECT

это ответы от adsl рутера не режет, случаем?

www.fwbuilder.org

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

23. "NAT на linux с одним сетевым интерфейсом"  
Сообщение от GaDiNa (ok) on 31-Мрт-09, 14:08 
>iptables -A FORWARD -s 192.168.0.0/24 -j REJECT
>
>это ответы от adsl рутера не режет, случаем?
>
>www.fwbuilder.org

точно ! вот где была проблема.
Спасибо огромное ! сразу стало понятней.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру