LinuxForum.Fans
Тема

Шлюз и доступ в интернет

Автор: ruldik 42 сообщений 8511 просмотров
#345810

Доброго времени суток!!! Народ HELP!!!
Сеть: пров (YOTA с выделенным IP) -> шлюз (CentOS: vpn, dhcp) -> локалка (192.168.1.0/24)
Ситуация следующая: ip получаю, а вот в инет выйти немогу.... При этом VPN соединение проходит и компы в сети доступны, также на веб морду wifi роутера по локальному ip зайти могу, service iptables stop для тестирования!
Подскажите куда смотреть???

#345815

Пинги ходят? DNS прописаны?
Проверь пинг до 8.8.8.8

#345818

пинги до 8.8.8.8 не идут с машины, со шлюза пинги идут!!!
Что в resolv должно быть прописано?

#345837
ruldik написал:
пинги до 8.8.8.8 не идут с машины, со шлюза пинги идут!!!
Что в resolv должно быть прописано?

вот это 8.8.8.8 если конечно не поднимается свой кешируюший ДНС тогда 127.0.0.1
а форвардинг пакетов между сетевками вклчен ?

#345845

А как у вас шлюз настроен, и по какой технологии вы подключаетесь к интернету? На самом шлюзе интернет есть??? Он как должен интернет роздавать???? Если с помощью прокси, то смотрите в конфиг, например сквида. Если с помощью NAT, то

"ruldik" написал:
service iptables stop для тестирования!

как раз NAT и отключает.
Самое первое, покажыте но

text
cat /proc/sys/net/ipv4/ip_forward

конфиг iptables,

text
netstat -rn
cat /etc/resolv.conf
#345865
text
# iptables
*nat
:PREROUTING ACCEPT [14:828]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [181:22996]
-A INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p gre -j ACCEPT
-A INPUT -p tcp -m tcp --dport 1723 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A FORWARD -i eth0 -o eth1 -j ACCEPT
-A FORWARD -i eth1 -o eth0 -j ACCEPT
-A FORWARD -i ppp+ -o eth0 -j ACCEPT
-A FORWARD -i eth0 -o ppp+ -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --sport 80 -j ACCEPT
COMMIT
text
# cat /proc/sys/net/ipv4/ip_forward
1
text
# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
10.0.0.0        0.0.0.0         255.255.255.0   U         0 0          0 eth1
192.168.1.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
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth1
0.0.0.0         10.0.0.1        0.0.0.0         UG        0 0          0 eth1
text

# cat /etc/resolv.conf
nameserver 10.0.0.1

eth0 - локалка (192.168.1.0/24) eth1 - YOTA

на шлюзе инет есть, сайты пингуются и по vpn подключение проходит...
инет надо через NAT

#345873

Обясните внятнее чего вы добиваетесь, что работает, а что нет???

#345875

хочу чтоб инет раздавал шлюз на CentOS....
на шлюзе инет есть, а за шлюзом нет....

#345876

У него же дефолтом в eth1 (через 10.0.0.1) траф идет. А masquerade на eth0 написан
[console]
iptables -t nat -D POSTROUTING 1
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
[/console]
Последняя строка - для перестраховки :D

#345878

Уважаемый afanasev.p спасибо большое за помощь!!! Все работает!!! Была у меня мыслишка на эту тему, но почему то я на это не обратил никого внимания!!!

#346009

Не стал создавать новую тему, спрошу здесь...
насколько я понял из просторов инета и всяких манов по iptables INPUT и OUTPUT относятся непосредственно к серверу, т.е. предоставлять доступ тем или иным пакетам для работы сервера...., а FORWARD для транзита пакетов между интернетом и пользовательскими машинами (извиняюсь, если не правильно выражаюсь)... Там конечно еще много всяких вкусняшек..., но хотелось остановиться по подробней на FORWARD...
eth0 - локалка, eth1 - провайдер
Как правильно сделать FORWARD по определенным портам, т.е. типа разрешить порты например 80, 443, 25, 110?
Сейчас у меня в iptables, в цепочке FORWARD так:
[console]-P FORWARD DROP
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.1.0/24 -i eth0 -m conntrack --ctstate NEW -j ACCEPT[/console]
Все работает, инет есть у всех...
пробовал так
[console]-A FORWARD -o eth1 -m state --state NEW -p tcp -m multiport --dports 80,443,110,25 -j ACCEPT[/console]

инет пропадает и почту не работает

#346010

Попробуй так:

text
iptables -P FORWARD DROP
iptables -A FORWARD -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -s 192.168.1.0/24 -p tcp -m multiport --dports 80,443,110,25 -j ACCEPT

Здесь адаптеры:

eth1 - локальной сети
eth0 - Интернет

#346014

попробовал, не хочет.......

#346015

У меня работает такой вот простой скрипт:

# vi /etc/sysconfig/firewall.sh
text
#!/bin/bash

#Очистка всех цепочек iptables -F iptables -F -t nat iptables -F -t mangle

iptables -X iptables -X -t nat iptables -X -t mangle

#Политика по умолчанию - запретить все, что не разрешено iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP

#Разрешаем обращение к lo интерфейсу iptables -A INPUT -i lo -p all -j ACCEPT iptables -A INPUT -i eth1 -j ACCEPT iptables -A OUTPUT -o lo -p all -j ACCEPT iptables -A OUTPUT -o eth1 -j ACCEPT

#Пропускать уже иницированные, а также их дочерние iptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT

#Пропускать новые, инициированные, а также их дочерние iptables -A OUTPUT -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

#Разрешить пересылку для новых, инициированных, а также их дочерних iptables -A FORWARD -p all -m state --state ESTABLISHED,RELATED -j ACCEPT

#Разрешаем обращение к mail, http, ssh, dns, ftp серверам из нашей локалки iptables -A FORWARD -i eth1 -o eth0 -s 10.168.50.0/24 -p tcp -m multiport --dports 22,21,25,53,80,110,443 -j ACCEPT

#Разрешаем пинги с внутреннего интерфейса iptables -A INPUT -i eth1 -p ICMP -j ACCEPT iptables -A OUTPUT -o eth1 -p ICMP -j ACCEPT

#Настройка NAT и редирект на прокси сервер Squid #iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3128 iptables -t nat -A POSTROUTING -s 10.168.50.0/255.255.255.0 -j SNAT --to-source 111.222.333.444

Здесь:
10.168.50.0/24 - локальная сеть
111.222.333.444 - IP адрес внешнего адаптера
eth0 - адаптер откуда приходит Интернет
eth1 - адаптер подключенный в локальную сеть

Этот скрипт ставится в автозагрузку через rc.local
Ему надо дать права на запуск.

А DNS сервера какие используешь, провайдера или роутера?

#346020

попробую, отпишу!!! DNS прова!

#346024

и снова облом, не хочет.... вот блин......... :(
тока вместо Вашего
[console]iptables -t nat -A POSTROUTING -s 10.168.50.0/255.255.255.0 -j SNAT --to-source 111.222.333.444[/console]

оставил свое

[console] -A POSTROUTING -o eth1 -j MASQUERADE [/console]

#346041

Не работает, потому что в твоем случае правило NAT надо писать так:

text
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE

Попробуй...

Покажи выводы команд:

text
nslookup google.ru
telnet 8.8.8.8 53
telnet 176.222.191.241 80
iptables -n -L -v

В настройках сетевух на компах пропиши:
1. Адрес шлюза: IP адрес машины на CentOS
2. Адрес DNS: IP адрес DNS прова

#346046

По порядку
[console]
-P FORWARD DROP
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.1.0/24 -i eth0 -m conntrack --ctstate NEW -j ACCEPT
[/console]
Если к этим правилам добавить
[console]
-A FORWARD -o eth1 -m state --state NEW -p tcp -m multiport --dports 80,443,110,25 -j ACCEPT
[/console]
то инет должен продолжить работать у всех. К добавленному правилу не дойдет ни один пакет из сети 192.168.1.0/24. Зато вот с других сетей - очень даже дойдет. Но (по идее), дропнуться все пакеты. Т.к. указана опция "-o eth1". На момент, когда пакет дойдет до этого правила запись о нем уже будет существовать в conntrack. Соответственно state будет не NEW (очень возможно что заблуждаюсь, нужно поднимать мануалы). Кроме того, этим правилом фильтруется исходящий трафик, что нагружает шлюз (отрабатывают все цепочки и правила). Имхо, но стоит фильтровать трафик входящий. Т.е. как-то так (общая картина при условии, что трафик пропускать можно из любой серой сети):
[console]
-P FORWARD DROP
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -m state --state NEW -p tcp -m multiport --dports 80,443,110,25 -j ACCEPT
[/console]
Если же оба правила из первого листинга заменить на одно из второго - то действительно ни у кого инет работать не будет. Шлюз будет пропускать первые пакеты для новых соединений, будет их nat- masquerad-ить. Но вот ответные пакеты проходить уже не будут.
Если уж очень хочется, то можно убрать проверку интерфейса в правиле из второго листинга:
[console]
-P FORWARD DROP
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -m state --state NEW -p tcp -m multiport --dports 80,443,110,25 -j ACCEPT
[/console]
но первое правило стоит оставить, т.к. оно отвечает за соединения, которые уже установились - соответственно прошли все проверки ранее. Кроме того, это правило может снизить нагрузку на роутер в случае, если правил много (например, добавляются динамически)

AlfaStriker написал:

[console]
iptables -P FORWARD DROP
iptables -A FORWARD -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -s 192.168.1.0/24 -p tcp -m multiport --dports 80,443,110,25 -j ACCEPT
[/console]

Правила эти работать не будут, т.к. после nat-а src address в пакете будет установлен в адрес роутера и никак не попадет под "-s 192.168.1.0/24".

Оттестировал ваш скрипт на 2-х виртуалках. Результирующие правила фаервола:
[console]
[root@localhost ~]# iptables -nvL --line-numbers
Chain INPUT (policy DROP 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 7100 9302K ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 61 6832 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
3 3 252 ACCEPT all -- eth1 * 0.0.0.0/0 0.0.0.0/0
4 0 0 ACCEPT icmp -- eth1 * 0.0.0.0/0 0.0.0.0/0

Chain FORWARD (policy DROP 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 0 0 ACCEPT tcp -- eth1 eth0 10.168.50.0/24 0.0.0.0/0 multiport dports 22,21,25,53,80,110,443

Chain OUTPUT (policy DROP 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 74 10984 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state NEW,RELATED,ESTABLISHED
2 19 2128 ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0
3 22 1848 ACCEPT all -- * eth1 0.0.0.0/0 0.0.0.0/0
4 0 0 ACCEPT icmp -- * eth1 0.0.0.0/0 0.0.0.0/0
[/console]
[console]
[root@localhost ~]# iptables -nvL --line-numbers -t nat
Chain PREROUTING (policy ACCEPT 150 packets, 12411 bytes)
num pkts bytes target prot opt in out source destination

Chain POSTROUTING (policy ACCEPT 20 packets, 1292 bytes)
num pkts bytes target prot opt in out source destination
1 1 84 SNAT all -- * * 10.168.50.0/24 0.0.0.0/0 to:1.2.3.4

Chain OUTPUT (policy ACCEPT 29 packets, 1940 bytes)
num pkts bytes target prot opt in out source destination
[/console]
[console]
[root@localhost ~]# ip addr list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
inet 1.2.3.4/32 scope global eth0
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
inet 10.168.50.1/24 scope global eth1
[/console]
В eth1 дует второй хост (серая сеть) пинги на 8.8.8.8
Если наблюдать tcpdump-ом, то можно увидеть пакеты, прилетающие на eth1. А вот с eth0 уже ничего не улетает.
Не могу понять как для вас это работает

PS: Оу. Что-то я совсем момент проглядел. Там же про icmp ни слова нет. Попробовал поставить telnet из дефолтных реп - результат отрицательный. DNS-запросы не отрабатываются

#346047

afanasev.p, проверьте пожалуйста мои правила, работают ли они:

# touch /etc/sysconfig/firewall.sh

# chmod +x /etc/sysconfig/firewall.sh

# vi /etc/sysconfig/firewall.sh
Показать
#!/bin/bash
#Очистка всех цепочек
iptables -F
iptables -F -t nat
iptables -F -t mangle

iptables -X
iptables -X -t nat
iptables -X -t mangle

#Политика по умолчанию - запретить все, что не разрешено
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

#Разрешаем обращение к lo интерфейсу
iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A INPUT -i eth1 -j ACCEPT
iptables -A OUTPUT -o lo -p all -j ACCEPT
iptables -A OUTPUT -o eth1 -j ACCEPT

#Пропускать уже иницированные, а также их дочерние
iptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT

#Пропускать новые, инициированные, а также их дочерние
iptables -A OUTPUT -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

#Разрешить пересылку для новых, инициированных, а также их дочерних
iptables -A FORWARD -p all -m state --state ESTABLISHED,RELATED -j ACCEPT

#Разрешаем обращение к mail, http, ssh, dns, ftp серверам из нашей локалки
iptables -A FORWARD -i eth1 -o eth0 -s 10.168.50.0/24 -p tcp -m multiport --dports 22,21,25,53,80,110,443 -j ACCEPT

#Разрешаем пинги с внутреннего интерфейса
iptables -A INPUT -i eth1 -p ICMP -j ACCEPT
iptables -A OUTPUT -o eth1 -p ICMP -j ACCEPT

#Настройка NAT
iptables -t nat -A POSTROUTING -s 10.168.50.0/24 -j MASQUERADE

10.168.50.0/24 - локальная сеть

Запуск простого скрипта:

# /etc/sysconfig/firewall.sh
#346048

Так Ваши же и проверял :)
И опять не "в точку". Еще раз перепроверил. В FORWARD не хватает разрешения DNS по udp. Поэтому первый раз "проверка" прошла без результата

Войдите или зарегистрируйтесь, чтобы ответить.