Доброго времени суток!!! Народ HELP!!!
Сеть: пров (YOTA с выделенным IP) -> шлюз (CentOS: vpn, dhcp) -> локалка (192.168.1.0/24)
Ситуация следующая: ip получаю, а вот в инет выйти немогу.... При этом VPN соединение проходит и компы в сети доступны, также на веб морду wifi роутера по локальному ip зайти могу, service iptables stop для тестирования!
Подскажите куда смотреть???
Шлюз и доступ в интернет
Пинги ходят? DNS прописаны?
Проверь пинг до 8.8.8.8
пинги до 8.8.8.8 не идут с машины, со шлюза пинги идут!!!
Что в resolv должно быть прописано?
пинги до 8.8.8.8 не идут с машины, со шлюза пинги идут!!!
Что в resolv должно быть прописано?
вот это 8.8.8.8 если конечно не поднимается свой кешируюший ДНС тогда 127.0.0.1
а форвардинг пакетов между сетевками вклчен ?
А как у вас шлюз настроен, и по какой технологии вы подключаетесь к интернету? На самом шлюзе интернет есть??? Он как должен интернет роздавать???? Если с помощью прокси, то смотрите в конфиг, например сквида. Если с помощью NAT, то
service iptables stop для тестирования!
как раз NAT и отключает.
Самое первое, покажыте но
cat /proc/sys/net/ipv4/ip_forwardконфиг iptables,
netstat -rn
cat /etc/resolv.conf# 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# cat /proc/sys/net/ipv4/ip_forward
1# 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
# cat /etc/resolv.conf
nameserver 10.0.0.1
eth0 - локалка (192.168.1.0/24)
eth1 - YOTA
на шлюзе инет есть, сайты пингуются и по vpn подключение проходит...
инет надо через NAT
Обясните внятнее чего вы добиваетесь, что работает, а что нет???
хочу чтоб инет раздавал шлюз на CentOS....
на шлюзе инет есть, а за шлюзом нет....
У него же дефолтом в 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
Уважаемый afanasev.p спасибо большое за помощь!!! Все работает!!! Была у меня мыслишка на эту тему, но почему то я на это не обратил никого внимания!!!
Не стал создавать новую тему, спрошу здесь...
насколько я понял из просторов инета и всяких манов по 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]
инет пропадает и почту не работает
Попробуй так:
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 - Интернет
попробовал, не хочет.......
У меня работает такой вот простой скрипт:
# 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 и редирект на прокси сервер 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 сервера какие используешь, провайдера или роутера?
попробую, отпишу!!! DNS прова!
и снова облом, не хочет.... вот блин......... :(
тока вместо Вашего
[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]
Не работает, потому что в твоем случае правило NAT надо писать так:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADEПопробуй...
Покажи выводы команд:
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 прова
По порядку
[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]
но первое правило стоит оставить, т.к. оно отвечает за соединения, которые уже установились - соответственно прошли все проверки ранее. Кроме того, это правило может снизить нагрузку на роутер в случае, если правил много (например, добавляются динамически)
[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-запросы не отрабатываются
afanasev.p, проверьте пожалуйста мои правила, работают ли они:
# touch /etc/sysconfig/firewall.sh
# chmod +x /etc/sysconfig/firewall.sh
# vi /etc/sysconfig/firewall.sh
Показать
#Очистка всех цепочек
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
Так Ваши же и проверял :)
И опять не "в точку". Еще раз перепроверил. В FORWARD не хватает разрешения DNS по udp. Поэтому первый раз "проверка" прошла без результата