понедельник, 18 августа 2008 г.

Port forwarding в iptables для корректной работы DC++ среди пользователей локальной сети, сидящих за общим интернет-шлюзом.

Итак у нас есть локальная сеть и сервер, раздающий интернет (схему см. ниже)
+------------+
| Интернет |
+------------+
|
|
10.71.5.2(eth0)
+----------------+
| Linux-сервер |
+----------------+
192.168.66.1(eth1)
|
|
192.168.66.5
+--------------------+
| комп в локалке |
+--------------------+

Перед нами стоит задача пробросить порты через линукс-сервер для работы DC++ на компе в локалке, допустим это будут порты TCP:10001, UDP:10001 или любые другие свободные порты по вашему выбору, причем порты для каждого компа в локалке должны быть строго уникальны. Здесь стоить отметить, что для каждого отдельно взятого компа в локалке придется создавать свой блок правил для iptables, которые мы рассмотрим ниже.

Итак, чтобы все у нас работало, необходимо на сервере по root'ом выполнить следующие две пары команды:



iptables -t nat -I PREROUTING -p tcp --dport 10001 -j DNAT --to 192.168.66.5:10001 #Это правило превращает пакет из ВХОДЯЩЕГО в "ПРОХОДЯЩИЙ СКВОЗЬ"
iptables -I FORWARD -p tcp -d 192.168.66.5 --dport 10001 -j ACCEPT # Это правило собственно разрешает прохождение таких пакетов

iptables -t nat -I PREROUTING -p udp --dport 10001 -j DNAT --to 192.168.66.5:10001
iptables -I FORWARD -p udp -d 192.168.66.5 --dport 10001 -j ACCEPT

Теперь сохраняем настройки фаервола (справедливо для AltLinux)
serviсe iptables save
После такой команды наши правила сохряняться в /etc/sysconfig/iptables (справедливо для AltLinux, но вообщето зависит от дистрибутива) и после перезагрузки наши внесенные правила никуда не исчезнут, т к будут сохраненны в дефолтный конфигурационный файл фаервола :-)
Далее рестартуем фаервол
service iptables restart

Теперь пользователь с 192.168.66.5:10001 сможет качать на хабе с других пользователей в пределах своего провайдера, т к как мы не рассматривали возможность приобретения выделенного реально маршрутизируемого ("белого") IP-адреса для присвоения его нашему linux-серверу. Впрочем, если провайдер может предоставлять выделенные статические "белые" адреса, то пользователи локальной сети смогут качать на дц++ хабах не только своего провайдера, но так же и глобальной сети Интернет.

Теперь осталось только настроить DC++ клиент, в нашем случае мы будем использовать программу FlyLinkDC++ под windows.
Запускаем программу, далее заходим Файл - Настройки - Настройки соединения.
Здесь прописываем:
  • Сетевой интерфейс для всех соединений = 192.168.66.5
  • отмечаем "Брандмауэр с ручным перенаправлением портов"
  • Внешний / WAN IP = 10.71.5.2
  • TCP=10001
  • UDP=10001

P.S.: Практически сей мануал на "живом" сервере не проверялся, однако теоретически должен работать. Всю информацию вы используете на свой страх и риск. :-)

1 комментарий:

Анонимный комментирует...

>> Строку

iptables -I FORWARD 1 -p tcp -i eth0 --dport 10001 -j ACCEPT

>> надо заменить на

iptables -I FORWARD -p tcp -d 192.168.0.2 --dport 10001 -j ACCEPT

И тогда энто будет работать ^_^

(c) TrenAr