Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Проброс портов через iptables  (Прочитано 9366 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн raxer

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Проброс портов через iptables
« : 05 Февраля 2010, 09:30:17 »
Добрый день.
У меня на сервере крутится ubuntu server 8.04. 2 сетевых интерфейса
eth2 - 10.0.0.1 - смотрит в локалку
ppp0 - адсл соединение, с динамическим белым ip.
Инет раздается связкой dnsmasq и ipmasq.
Нужно прокинуть порт 15000 доступного снаружи, на порт 80 сервера 10.0.0.100 находящегося в локалке. вводил различные команды, не помогает(
добавлял следующие правила в iptables:
iptables -A INPUT -p tcp --destination-port 15000 -j ACCEPT
iptables -A FORWARD -i ppp0 -p tcp --destination-port 15000 -j ACCEPT
iptables -A OUTPUT-p tcp --destination-port 15000 -j ACCEPT

iptables -t nat -A PREROUTING -p tcp -ppp0 --dport 15000 -j DNAT --to-destination 10.0.0.100:80
iptables -t nat -A POSTROUTING -p tcp --dst 10.0.0.100 --dport 80 -j SNAT --to-source 10.0.0.1

вывод
iptables -t nat -v -L
root@server:/etc/ipmasq/rules# iptables -v -t nat -L
Chain PREROUTING (policy ACCEPT 5891 packets, 633K bytes)
 pkts bytes target     prot opt in     out     source               destination
   30  1560 DNAT       tcp  --  ppp0   any     anywhere             anywhere            tcp dpt:15000 to:10.0.0.100:80

Chain POSTROUTING (policy ACCEPT 60 packets, 5167 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 SNAT       tcp  --  any    any     anywhere             10.0.0.100          tcp dpt:www to:10.0.0.1
 2949  329K MASQUERADE  all  --  any    ppp0    10.0.0.0/24          anywhere

Chain OUTPUT (policy ACCEPT 60 packets, 5167 bytes)
 pkts bytes target     prot opt in     out     source               destination


iptables -L -v
Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:15000
  306 25802 ACCEPT     all  --  lo     any     anywhere             anywhere
    0     0 LOG        all  --  !lo    any     127.0.0.0/8          anywhere            LOG level warning
    0     0 DROP       all  --  !lo    any     127.0.0.0/8          anywhere
    3   984 ACCEPT     all  --  eth2   any     anywhere             255.255.255.255
  142 11290 ACCEPT     all  --  eth2   any     10.0.0.0/24          anywhere
    0     0 ACCEPT    !tcp  --  eth2   any     anywhere             BASE-ADDRESS.MCAST.NET/4
    0     0 LOG        all  --  ppp0   any     10.0.0.0/24          anywhere            LOG level warning
    0     0 DROP       all  --  ppp0   any     10.0.0.0/24          anywhere
    0     0 ACCEPT     all  --  ppp0   any     anywhere             255.255.255.255
 2968  340K ACCEPT     all  --  ppp0   any     anywhere             adsl-194-220-49-19.kmtn.ru
    0     0 DROP       all  --  any    any     anywhere             ALL-SYSTEMS.MCAST.NET
    0     0 LOG        all  --  any    any     anywhere             anywhere            LOG level warning
    0     0 DROP       all  --  any    any     anywhere             anywhere

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     tcp  --  ppp0   any     anywhere             anywhere            tcp dpt:15000
40592   38M ACCEPT     all  --  eth2   ppp0    10.0.0.0/24          anywhere
25096 2181K ACCEPT     all  --  any    any     anywhere             anywhere            state RELATED,ESTABLISHED
    0     0 LOG        all  --  any    ppp0    anywhere             10.0.0.0/24         LOG level warning
    0     0 DROP       all  --  any    ppp0    anywhere             10.0.0.0/24
    0     0 DROP       all  --  any    any     anywhere             ALL-SYSTEMS.MCAST.NET
   30  1560 LOG        all  --  any    any     anywhere             anywhere            LOG level warning
   30  1560 DROP       all  --  any    any     anywhere             anywhere

Chain OUTPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp spt:15000
  306 25802 ACCEPT     all  --  any    lo      anywhere             anywhere
    0     0 ACCEPT     all  --  any    eth2    anywhere             255.255.255.255
   67 21769 ACCEPT     all  --  any    eth2    anywhere             10.0.0.0/24
    0     0 ACCEPT    !tcp  --  any    eth2    anywhere             BASE-ADDRESS.MCAST.NET/4
    0     0 LOG        all  --  any    ppp0    anywhere             10.0.0.0/24         LOG level warning
    0     0 DROP       all  --  any    ppp0    anywhere             10.0.0.0/24
    0     0 ACCEPT     all  --  any    ppp0    anywhere             255.255.255.255
 2789  456K ACCEPT     all  --  any    ppp0    adsl-194-220-49-19.kmtn.ru  anywhere
    0     0 DROP       all  --  any    any     anywhere             ALL-SYSTEMS.MCAST.NET
    0     0 LOG        all  --  any    any     anywhere             anywhere            LOG level warning
    0     0 DROP       all  --  any    any     anywhere             anywhere


Вот где я накосячил?


Оффлайн renat906

  • Новичок
  • *
  • Сообщений: 31
    • Просмотр профиля
Re: Проброс портов через iptables
« Ответ #1 : 05 Февраля 2010, 09:36:36 »
я правильно понял, что должно быть что-то типа 212,х,х,х:15000 <----> 10.0.0.100:80 ?
если да то нет правила переброса порта
и сейчас работает 212.x.x.x:15000 <----> 10.0.0.100:15000
а должно быть, что-то типа  iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80   -j REDIRECT --to-port 15000
« Последнее редактирование: 05 Февраля 2010, 09:41:48 от renat906 »

Оффлайн raxer

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Re: Проброс портов через iptables
« Ответ #2 : 05 Февраля 2010, 09:41:55 »
я правильно понял, что должно быть что-то типа 212,х,х,х:15000 <----> 10.0.0.100:80
если да то нет правила переброса порта
и сейчас работает 212.x.x.x:15000 <----> 10.0.0.100:15000
Подскажите, а что прописать надо?

Оффлайн terrible_user

  • Активист
  • *
  • Сообщений: 438
    • Просмотр профиля
Re: Проброс портов через iptables
« Ответ #3 : 05 Февраля 2010, 10:20:43 »
iptables -A INPUT -p tcp --destination-port 15000 -j ACCEPT
iptables -A FORWARD -i ppp0 -d 10.0.0.100 -o eth2 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 15000 -j DNAT --to-destination 10.0.0.100:80

 ~ как то так
Бери больше, кидай дальше

Оффлайн raxer

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Re: Проброс портов через iptables
« Ответ #4 : 05 Февраля 2010, 10:43:27 »
iptables -A INPUT -p tcp --destination-port 15000 -j ACCEPT
iptables -A FORWARD -i ppp0 -d 10.0.0.100 -o eth2 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 15000 -j DNAT --to-destination 10.0.0.100:80

 ~ как то так


не прокатило(( всеравно не пускает(

Оффлайн aSmile

  • Активист
  • *
  • Сообщений: 754
    • Просмотр профиля
Re: Проброс портов через iptables
« Ответ #5 : 05 Февраля 2010, 17:56:02 »
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i ppp0 -p tcp --destination-port 15000 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -ppp0 --dport 15000 -j DNAT --to-destination 10.0.0.100:80
Разве этих строк не должно хватить?

Оффлайн roma333

  • Участник
  • *
  • Сообщений: 206
    • Просмотр профиля
Re: Проброс портов через iptables
« Ответ #6 : 05 Февраля 2010, 18:02:55 »
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i ppp0 -p tcp --destination-port 15000 -j ACCEPT
[b]iptables -t nat -A PREROUTING -p tcp -ppp0 --dport 15000 -j DNAT --to-destination 10.0.0.100:80[/b]
Разве этих строк не должно хватить?
Выделенная жирным строчка должна, наверное, выглядеть так:
iptables -t nat -A PREROUTING -i ppp0 -p tcp  --dport 15000 -j DNAT --to-destination 10.0.0.100:80
« Последнее редактирование: 05 Февраля 2010, 18:28:25 от roma333 »

Оффлайн aSmile

  • Активист
  • *
  • Сообщений: 754
    • Просмотр профиля
Re: Проброс портов через iptables
« Ответ #7 : 05 Февраля 2010, 18:13:04 »
ой-ой, извиняюсь. copy+paste сделал, не обратив внимания.

Оффлайн RandomNT

  • Любитель
  • *
  • Сообщений: 80
    • Просмотр профиля
Re: Проброс портов через iptables
« Ответ #8 : 05 Февраля 2010, 18:39:56 »
в таблице FORWARD порт должен быть 80
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i ppp0 -d 10.0.0.100 -p tcp --dport 80 -m state --state NEW -j ACCEPT
iptables -t nat -A PREROUTING -i ppp0 -p tcp  --dport 15000 -j DNAT --to-destination 10.0.0.100:80
На компе 10.0.0.100 шлюзом должна быть прописана Ubuntu.
И вариант terrible_user должен был сработать.

Пользователь решил продолжить мысль [time]Fri Feb  5 16:41:23 2010[/time]:
да, форвардинг пакетов разрешить же надо
echo "1" > /proc/sys/net/ipv4/ip_forwardхотя он наверно разрешен
« Последнее редактирование: 05 Февраля 2010, 18:42:35 от RandomNT »

Оффлайн raxer

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Re: Проброс портов через iptables
« Ответ #9 : 05 Февраля 2010, 20:41:45 »
в таблице FORWARD порт должен быть 80
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i ppp0 -d 10.0.0.100 -p tcp --dport 80 -m state --state NEW -j ACCEPT
iptables -t nat -A PREROUTING -i ppp0 -p tcp  --dport 15000 -j DNAT --to-destination 10.0.0.100:80
На компе 10.0.0.100 шлюзом должна быть прописана Ubuntu.
И вариант terrible_user должен был сработать.

Пользователь решил продолжить мысль [time]Fri Feb  5 14:41:23 2010[/time]:
да, форвардинг пакетов разрешить же надо
echo "1" > /proc/sys/net/ipv4/ip_forwardхотя он наверно разрешен

Спасибо большое! Этот вариант подошел.. Там были еще некоторые проблемы с файрволом из за кучи правил которые ввел ipmasq. когда сам руками прописал нужные правила - проблема решилась..
но появилась другая.. находясь внутри сети я не могу обратиться к серверу, на который пробрасываю порты по внешнему адресу. т.е. если я нахожусь внутри сети и вбиваю адрес http://raxer.mine.ru:15000 то соединения не просиходит. если я проделываю ту же операцию, но из интернета - все отлично работает.

Пользователь решил продолжить мысль [time]Fri Feb  5 18:43:00 2010[/time]:
та же проблема у меня была и когда я пользовался модемом длинка как роутером. но там  отсутствовала функция NAT Loopback. Как мне в iptables её реализовать?
« Последнее редактирование: 05 Февраля 2010, 20:43:38 от raxer »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28366
    • Просмотр профиля
Re: Проброс портов через iptables
« Ответ #10 : 05 Февраля 2010, 20:56:22 »
Вот за это ipmasq и выкинули... что всё прописываемую им помойку легко заменяет одно правило, прописанное руками.

но появилась другая.. находясь внутри сети я не могу обратиться к серверу, на который пробрасываю порты по внешнему адресу. т.е. если я нахожусь внутри сети и вбиваю адрес http://raxer.mine.ru:15000 то соединения не просиходит. если я проделываю ту же операцию, но из интернета - все отлично работает.

та же проблема у меня была и когда я пользовался модемом длинка как роутером. но там  отсутствовала функция NAT Loopback. Как мне в iptables её реализовать?

Никак. Обращайтесь по внутреннему реальному адресу. (Реальному в смысле принадлежности машине, а не допустимости в интернете)
« Последнее редактирование: 05 Февраля 2010, 20:58:11 от AnrDaemon »
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн aSmile

  • Активист
  • *
  • Сообщений: 754
    • Просмотр профиля
Re: Проброс портов через iptables
« Ответ #11 : 05 Февраля 2010, 23:14:04 »
можно сделать.
попробуй
iptables -t nat POSTROUTING -o eth2 -s 10.0.0.0/24 -j SNAT --to-source 10.0.0.1
Пользователь решил продолжить мысль 05 Февраля 2010, 23:16:17:
да, и в строчке
iptables -t nat -A PREROUTING -i ppp0 -p tcp  --dport 15000 -j DNAT --to-destination 10.0.0.100:80убрать -i ppp0
« Последнее редактирование: 05 Февраля 2010, 23:16:17 от aSmile »

Оффлайн lius

  • Новичок
  • *
  • Сообщений: 41
    • Просмотр профиля
Re: Проброс портов через iptables
« Ответ #12 : 05 Февраля 2010, 23:18:57 »
но появилась другая.. находясь внутри сети я не могу обратиться к серверу, на который пробрасываю порты по внешнему адресу. т.е. если я нахожусь внутри сети и вбиваю адрес http://raxer.mine.ru:15000 то соединения не просиходит. если я проделываю ту же операцию, но из интернета - все отлично работает.

Пользователь решил продолжить мысль [time]Fri Feb  5 18:43:00 2010[/time]:
та же проблема у меня была и когда я пользовался модемом длинка как роутером. но там  отсутствовала функция NAT Loopback. Как мне в iptables её реализовать?

Это можно реализовать через DNS сервер, чтоб на запрос внутри локалки http://raxer.mine.ru он выдавал локальный ip

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28366
    • Просмотр профиля
Re: Проброс портов через iptables
« Ответ #13 : 06 Февраля 2010, 01:45:35 »
Это можно реализовать через DNS сервер, чтоб на запрос внутри локалки http://raxer.mine.ru он выдавал локальный ip

Порты не совпадают.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн lius

  • Новичок
  • *
  • Сообщений: 41
    • Просмотр профиля
Re: Проброс портов через iptables
« Ответ #14 : 06 Февраля 2010, 02:05:18 »
Это можно реализовать через DNS сервер, чтоб на запрос внутри локалки http://raxer.mine.ru он выдавал локальный ip

Порты не совпадают.

А сделать второй виртуальный сервер (зеркало) на 15000 порту?

 

Страница сгенерирована за 0.03 секунд. Запросов: 23.