[edit] Broadcom VLAN limit
Pre-k3.10 builds OR any before 35244, a separate switch-robo.ko kernel module is required for Broadcom.
Reference: patches, and modules: VIDs beyond 15 possible?, VLAN config, Updated Guide (search the forum for more).
Example startup script to configure VLAN for VID 1000 and 2000 (customize VLAN configuration & VID(s) as needed!):
# Clear VLAN 0 & 2 echo "" > /proc/switch/eth0/vlan/0/ports echo "" > /proc/switch/eth0/vlan/2/ports # Configure VLAN 1 with LAN port 1, 2, 3 and CPU port echo "0 1 2 5t*" > /proc/switch/eth0/vlan/1/ports # Configure VLAN 1000 with WAN port and CPU port (both tagged) echo "4t 5t" > /proc/switch/eth0/vlan/1000/ports # Configure VLAN 2000 with LAN port 4, WAN port (tagged) and CPU port (tagged) echo "3 4t 5t" > /proc/switch/eth0/vlan/2000/ports # Setting up VLAN interfaces ... # We don't need the vlan2 interface now ... /sbin/ifconfig vlan2 down /sbin/vconfig rem vlan2 # Setup vlan1000 interface /sbin/vconfig add eth0 1000 /sbin/ifconfig vlan1000 up /sbin/ifconfig vlan1000 txqueuelen 0 # Setup vlan2000 interface /sbin/vconfig add eth0 2000 /sbin/ifconfig vlan2000 up /sbin/ifconfig vlan2000 txqueuelen 0 # Tell DD-WRT PPPoE startup code to use the new WAN interface /usr/sbin/nvram set pppoe_wan_ifname=vlan1000
- One could instead continue to use the NVRAM method to interface with DD-WRT configuration subsystems.
- Avoid storing too much in NVRAM (i.e. scripts). Recommended: use USB or JFFS partitions if possible.
Основы переадресации портов
Прежде чем мы настроим переадресацию портов, лучше понять, что это такое. Давайте рассмотрим простую аналогию делового комплекса, состоящего из двух офисных зданий A и B. Административный и торговый отделы находятся в корпусе A, а сервисный и исследовательский отделы – в корпусе B. Каждый из них имеет свой собственный почтовый ящик (1, 2, 3, и 4) в своих соответствующих зданиях. В таком случае уличный адрес офисного комплекса похож на внешний IP-адрес вашей сети. Имя здания (A / B) похоже на внутренний IP-адрес хоста / компьютера, на котором запущена определенная служба. Номер почтового ящика похож на номер порта. Любой пакет (интернет-пакет), полученный на ваш уличный адрес (внешний IP-адрес) для определенного почтового ящика (порта), будет автоматически перенаправлен в правильное здание (внутренний хост) с правильным отделом (службой), который принимает посылки через свой почтовый ящик (порт), Во избежание конфликтов во время маршрутизации две службы не могут работать на одном и том же порту. На следующем рисунке показано схематическое представление переадресации портов.
Схематическое изображение переадресации портов
Другие подходы
Для осуществления проброса порта совсем необязательно использовать брандмауэры или системные демоны, как, например, этого требуют старые версии FreeBSD. Существует несколько других способов сделать это с помощью специализированного софта или стандартных инструментов ОС (кто знает, возможно, ты используешь Minix в качестве ОС для шлюза :)). Один из таких инструментов — SSH. Далеко не каждый системный администратор в курсе, что проброс порта является стандартной функцией этой программы. Возьмем, к примеру, следующую ситуацию. В локальной сети, закрытой от внешней сети NAT’ом, есть сервер, к которому тебе необходимо иметь доступ. Ситуация усугубляется тем, что ты не имеешь привилегий для настройки файервола на машине-шлюзе. Зато у тебя есть доступ к SSH-серверу, работающему на этом шлюзе. Как это может помочь? На самом деле очень сильно. Ты просто выполняешь следующую команду на удаленной машине (serverip — адрес внутреннего сервера, gateway-ip — адрес шлюза):
И вуаля, порт 8080 локальной машины становится портом 80 внутреннего сервера локалки. Теперь достаточно набрать в веб-браузере адрес localhost:8080, и ты попадешь туда, куда надо. Твой SSH-клиент создаст туннель с SSH-сервером шлюза, все передаваемые в рамках которого данные будут направлены на порт 80 внутреннего сервера.
Более радикальный способ — установка софта, специально созданного для осуществления проброса портов. Одна из таких программ носит имя rinetd и представляет собой высокопроизводительный сервер, позволяю щий пробрасывать любое количество соединений. Он есть в пакетах для популярных Linux-дистрибутивов и портах BSD-систем.
После его установки достаточно отредактировать файл /etc/rinetd.conf (/usr/local/etc/rinetd.conf), поместив туда строки следующего вида:
И (пере)запустить сервер командой:
в Ubuntu или:
во FreeBSD. Так же во FreeBSD придется активировать запуск rinetd при
старте:
После этого весь трафик, пришедший на порт 80 машины 1.2.3.4, будет автоматически перенаправлен на тот же порт машины с IP-адресом 192.168.0.100.
Один из излюбленных способов проброса портов среди UNIX-администраторов заключается в использовании утилиты socket совместно с сетевым супер-сервером inetd. Как и все гениальное, идея в этом случае проста, а реализация очевидна. Открываем файл /etc/inetd.conf (даже если в твоей системе используется более новый xinetd, ты все равно можешь использовать этот файл) и добавляем в него строку следующего вида:
Здесь порт1 — это прослушиваемый порт на машине-шлюзе, а порт2 — порт назначения на внутренней машине 192.168.0.100. При этом оба они должны быть заданы в форме имени службы (www, ftp и т.д.), если же таковой не имеется (ты выбрал произвольный порт), то ее необходимо добавить в файл /etc/services.
Далее можно перезагрузить inetd командой «kill -HUP» и наслаждаться результатом. Если же его нет, то смотрим в файл /etc/hosts.allow. Доступ к службе должен быть открыт.
[edit] Preserve Settings Before you start
Telnet or SSH to the router (do not use the Commands GUI!) and run these commands to check the nvram variables for your default vlan configuration before you start so that you know the default configuration if you need to revert your changes without hard resetting.
nvram show | grep vlan.*ports | sort nvram show | grep port.*vlans | sort nvram show | grep vlan.*hwname | sort
These commands will output a bunch of lines that have a name, an equal sign (=), and then some more text which is the value of the variable like so:
vlan1ports=1 2 5* vlan2ports=0 5u ...
Save that list!
If you run into trouble, to revert your changes you will have to modify each line in the list and paste it back as follows: put nvram set in front of each line, and encapsulate each value with quotes:
nvram set vlan1ports="1 2 5*" nvram set vlan2ports="0 5u" ...
Then paste that into the Telnet or SSH command line (to reset those values), and save them permanently:
nvram set vlan1ports="1 2 5*" nvram set vlan2ports="0 5u" ... nvram commit
Перед установкой Optoware
Софт Optoware (такая программа для Linux), мы сейчас установим на роутер. Вернее – на USB диск (который, предварительно нужно отформатировать, создав три «линуксовых» раздела).
Берем флешку, или USB-диск. Берем live-cd с Линукс (даже knoppix), или просто компьютер с linux/unix. Если вы знаете, как записывать CD-диск из Iso-образа, и как загрузить ПК с CD-рома, этого будет достаточно.
Загружаемся в Линуксе. Подсоединяем к компьютеру USB-флешку. Разделы нужны будут следующие:
- EXT2, примерно 320 мегабайт
- swap, 64 Mb
- EXT2, остаток свободного места
Воспользуйтесь программой GParted
В этой программе, обратите внимание: физический накопитель отображается в правом верхнем углу окна
Подготовка флешки
Настройка USB. на роутере
Командная строка
Прошивка на ddwrt
Примечание:
- mount -o noatime /dev/scsi/host0/bus0/target0/lun0/part1 /jffs
- mount -o noatime /dev/scsi/host0/bus0/target0/lun0/part3 /mnt
- mount -o bind /jffs/opt /opt
Монтируем флешку
Прошивка dd-wrt
Хотите качать торрент через роутер, но вашей модели – нет в списке выше? Тогда, устанавливать альтернативную прошивку, вам придется в любом случае.
Для ASUS-ов, хорошие прошивки с поддержкой USB-опций, имеют название «от Олега». Мы же, рассмотрим «dd-wrt», как поддерживающие наибольшее число разных моделей.
Шаг первый. Идем на http://www.dd-wrt.com/site/support/router-database. Набираем номер модели роутера (например, dir 320, или n16). Смотрим список прошивок.
Прошивка ddwrt для роутера dir 320
Прошивка ddwrt для роутера Linksys WRT-610N
Примечание:
Разные ревизии
Внимание!
Так выглядит прошивка из нутри
[edit] PuTTY клиент
- Установите и запустите PuTTY на клиентском ПК.
- Впишите в Host Name (or IP Address) или динамическое DNS-имя вашего домашнего маршрутизатора, или его общедоступный интернет-адрес. (на картинке ниже это частный адрес локальной сети 10.0.0.1)
- Установите Port на Порт удаленного SSH, который вы установили в шаге 9 в конфигурировании SSH сервера.
- Установите Connection type в SSH.
- Перейдите в раздел Connection -> Data.
- УстановитеAuto-login username в root чтобы вам не нужно было набирать имя пользователя каждый раз, когда вы подключаетесь.
- Перейдите в раздел Connection -> SSH -> Tunnels.
- Введите 8080 в Source port.
- Выберите пункт Dynamic чтобы сделать его динамическим туннелем, который будет действовать как SOCKS прокси.
- Нажмите на кнопку Add чтобы добавить его список пробрасываемых портов. В списке он появится как D8080.
- Если вы настроили сервер на использование ключа авторизации, то перейдите в раздел Connection -> SSH -> Auth и введите местоположение файла вашего ключа.
- Вернитесь назад в раздел Session.
- Введите имя, которым вы хотите назвать набор настроек в поле Saved Sessions и нажмите кнопку Save.
- Теперь вы можете дважды щелкнуть имя сохраненной сессии в списке, чтобы загрузить его и открыть соединение с вашим SSH-сервером.
- При каждом подключении вам нужно будет вводить пароль маршрутизатора, если вы не используете авторизованный ключ.
Настройка перенаправления портов
Ну вот, всё готово, теперь настраиваем перенаправление.
Банальный DMZ
Настройка DMZ — операция в буквально два движения мышкой.
Идем на вкладку NAT/QOS — DMZ.
Включаем DMZ и указываем IP порта, куда направлять ВСЕ входящие сообщения.
Включение DMZ в DD-WRT
Нажимаем «применить» и собственно всё, ничего сложного и страшного, кроме создания опасности для компьютера. Теперь злоумышленникам легче достучаться до вашего компьютера.
Лучше подобрать более подходящий способ пробросить порты из предложенных ниже.
Хитрый UPnP
Настройка UPnP столь же банальна на стороне маршрутизатора.
Переходим на вкладку NAT/QOS — UPnP.
Включаем UPnP, включаем или отключаем очистку старых данных при перезагрузке на своё усмотрение. Если для разных целей используете разные порты — то точно не понадобится.
Включение и настройка UPnP в DD-WRT
Нажимаем так же «применить» и теперь программы, умеющие работать с UPnP сами перенаправят нужные порты на себя.
Удобно, но не все программы умеют. А вот всякие вирусы-backdoor’ы умеют, так что осторожнее.
С удобством через веб-интерфейс
Итак переходим к ручному пробросу портов.
Идем на вкладку NAT/QOS — Перенаправление портов.
Здесь указываем:
- Приложение — название программы для которой предназначено правило. Необходимо для удобства, чтобы потом не запутаться что и где перенаправляем.
- Протокол — TCP, UDP или Оба. В зависимости от типа протокола, который использует программа. Если не знаете или не уверены — указывайте Оба.
- Source Net — откуда идет входящее соединение. Если без разницы или не уверены — оставляйте пустым
- Порт источник — на какой порт идет входящее подключение. Если не знаете что указывать — указывайте порт, прописанный в программе
- IP-адрес — здесь указывайте IP адрес компьютера в домашней сети, куда перенаправляете
- Порт приемник — порт, указанный в программе, для которой настраиваете проброс портов
- Включить — отмечаете галочкой какие правила активны. Если вдруг надо отключить проброс портов, то не стоит удалять правило, просто снимаете галочку
Настройка перенаправления портов в DD-WRT
В итоге у вас должно получиться примерно так же, как на картинке выше. Способ самый удобный, но не достаточный в случае с DualAccess PPPoE/PPTP. Как быть с этими комбинированными подключениями — ниже.
Танцы с бубном — стартовые скрипты
Проброс портов через скрипты используется, как правило, при использовании типа соединения DualAccess.
В данном случае необходимо пробросить порты так же из локальной зоны провайдера, но вот незадача — через веб-интерфейс пробрасываются только порты основного соединения (ppp0).
Чтобы перенаправить порты и из локальной зоны делаем следующее.
Идем на вкладку Тех. обслуживание — Команды
И в поле для ввода текста вводим строки заменяя значения на свои:
iptables -A FORWARD -s 10.0.0.0/8 -j ACCEPT iptables -A FORWARD -d 10.0.0.0/8 -j ACCEPT iptables -I POSTROUTING -t nat -o vlan1 -d <strong>10.0.0.0/8 -j MASQUERADE iptables -t nat -A PREROUTING -i vlan1 -p tcp --dport 31818 -j DNAT --to-dest 192.168.1.125:31818 iptables -t nat -A PREROUTING -i vlan1 -p udp --dport 31818 -j DNAT --to-dest 192.168.1.125:31818
Где
10.0.0.0/8 — подсеть и маска сети провайдера (тоже самое, что 10.0.0.0/255.0.0.0). Узнать можно у провайдера.
vlan1 — имя WAN-интерфейса.
31818 — перенаправляемый порт.
tcp и udp — тип протокола.
192.168.1.125 — IP-адрес компьютера, на который перенаправляем обращение к порту.
Здесь первые три строки — сообщаем брандмауэру о существовании локальной сети. Их должно быть ровно три, дублировать не надо.
Последние две строки — перенаправляем udp и tcp протоколы порта 31818 на нужный нам компьютер. Они даны для примера, и их может быть любое количество. Меняйте данные на свои только.
После того, как сформировали все свои требования к брандмауэру — нажимаем Сохр.брандмауэр и ждем перезагрузки роутера.
Результат проделанной работы на рисунке снизу.
Ручное перенаправление портов через скрипт автозапуска брандмауэра в DD-WRT
Помогла статья? Поддержи блог — расскажи о нём на своей странице в социальной сети.
[edit] Options
--proto -p proto protocol: by number or name, eg. `tcp' --source -s address source specification. The mask can be either a network mask or a plain number, specifying the number of 1's at the left side of the network mask. Thus, a mask of 24 is equivalent to 255.255.255.0. A "!" argument before the address specification inverts the sense of the address. --destination -d address destination specification --sport port source port (use `:' when specifying range) --dport port destination port --in-interface -i input name network interface name ( for wildcard) --jump -j target target for rule (may load target extension) --match -m match extended match (may load extension) --state state connection states to match: INVALID NEW ESTABLISHED RELATED --tcp-flags mask match when the TCP flags are as specified: SYN ACK FIN RST URG PSH ALL NONE --numeric -n numeric output of addresses and ports --out-interface -o output name network interface name ( for wildcard) --table -t table table to manipulate (default: `filter') --verbose -v verbose mode --line-numbers print line numbers when listing --exact -x expand numbers (display exact values) --fragment -f match second or further fragments only --modprobe=<command> try to insert modules using this command --set-counters PKTS BYTES set the counter during insert/append --version -V print package version MAC v1.3.7 options: --mac-source XX:XX:XX:XX:XX:XX Match source MAC address
[edit] Firewall Forwarded Ports
If you have enabled SPI firewall feature on DD-WRT, your router is pretty much protected. However one practical use of iptables is protecting certain ports forwarded to internal IP addresses. The simplest way to do this is:
- Create port forwarding to internal IP addresses using the DD-WRT «Port Forwarding» web interface
- Supplement those rules with custom iptables on the Firewall script found under Administration — Commands interface to restrict which hosts can access the ports involved
Port Forward Example
The current port forwarded setup via the web GUI will be used as the basis to illustrate some examples:
- Application: ssh Port: 4022 Protocol: TCP forward to IP address: 192.168.1.5 Port: 22
- Application: ftp Port: 21 Protocol: TCP forward to IP address: 192.168.1.6 Port: 21
The example here port forwards external IP on port 4022 to internal server 192.168.1.5:22 for ssh and external port 21 to internal server 192.168.1.6:21 for ftp.
Firewall Rule Examples
You may first want to limit your ssh port to script kiddies, and prevent brute force attack. Thus you can limit the number of NEW ssh connections to about 3 attempts per minute. Any further attempts to crack the ssh port will be dropped:
iptables -I FORWARD -p tcp -d 192.168.1.5 --dport 22 -j DROP iptables -I FORWARD -p tcp --dport 22 -m state --state NEW -m limit --limit 3/min -j ACCEPT iptables -I FORWARD -p tcp --dport 22 -m state --state RELATED,ESTABLISHED -j ACCEPT
FTP access can also be limited to a certain network or network range in the following manner:
iptables -I FORWARD -p tcp -d 192.168.1.6 --dport 21 -j DROP iptables -I FORWARD -p tcp -s 198.133.219.0/24 --dport 21 -j ACCEPT iptables -I FORWARD -p tcp -s 69.147.64.0/18 --dport 21 -j ACCEPT iptables -I FORWARD -p tcp --dport 21 -m state --state RELATED,ESTABLISHED -j ACCEPT
You can of course combine both, rate limit and IP addresses limiting. This following example limits ssh connection from 207.171.160.0/19 with the same rate limit applied, along with the FTP rules all on the same script:
# limit SSH connection from script kiddies in Amazon's network iptables -I FORWARD -p tcp -d 192.168.1.5 --dport 22 -j DROP iptables -I FORWARD -p tcp -s 207.171.160.0/19 --dport 22 -m state --state NEW -m limit --limit 3/min -j ACCEPT iptables -I FORWARD -p tcp --dport 22 -m state --state RELATED,ESTABLISHED -j ACCEPT # limit FTP connection to two subnets iptables -I FORWARD -p tcp -d 192.168.1.6 --dport 21 -j DROP iptables -I FORWARD -p tcp -s 198.133.219.0/24 --dport 21 -j ACCEPT iptables -I FORWARD -p tcp -s 69.147.64.0/18 --dport 21 -j ACCEPT iptables -I FORWARD -p tcp --dport 21 -m state --state RELATED,ESTABLISHED -j ACCEPT
For multiport INPUT (or FORWARD if you choose) rate limiting, the following syntax rules can be esstablshed:
wanf=`get_wanface` iptables -I INPUT 2 -i $wanf -p tcp -m multiport --dports 21,22,80,82 -j logdrop iptables -I INPUT 2 -i $wanf -p tcp -m state --state NEW -m multiport --dports 21,22,80,82 -m limit --limit 3/minute --limit-burst 2 -j logaccept
To verify that the rules are working, open a terminal session and type iptables -vnL | more
If you’re adding a lot of rules, it helps to separate them with comments using the # prefix. You can of course use the basics of iptables explained in this article to make your rules more complex to suit your needs. However, instead of ordering the rules, the examples here merely insert these new ones on top of the FORWARD chain. This ensures that the firewall rules that limit traffic appear on top of the chain and gets applied first.
You may examine these rules on the router at anytime by accessing the router’s command prompt and running the command «iptables -vnL»
Подготовка к пробросу портов
Во всех случаев, кроме UPnP, прежде чем настраивать перенаправление портов, необходимо обеспечить постоянные IP-адреса компьютерам, на которые и будут порты перенаправляться.
Для этого в веб-интерфейсе DD-WRT надо перейти на вкладку Статус — LAN и узнать MAC-адреса компьютеров.
Дальше идем на на вкладку Службы и указываем MAC-адрес компьютера, имя хоста (любое латинскими буквами) и IP адрес, который закрепляем за ним.
Перезагружаем роутер.
Если компьютер подключен кабелем к маршрутизатору — то лучше отключить кабель перед перезагрузкой и после воткнуть его обратно. Это связано с тем, что ОС Windows не всегда вовремя понимает, что было переподключение и не запрашивает новый IP-адрес, и только таким вот способом можно ей об этом сообщить.
[edit] Основные варианты
Сброс 30/30/30
Единственные случаи, когда я видел настоящие ошибки с переадресацией портов в DD-WRT, — это необъяснимое поведение, вызванное правилами iptables, которое было исправлено путем сброса 30/30/30 и настройки маршрутизатора с нуля. Если в конфигурацию маршрутизатора внесено мало изменений, попробуйте выполнить сброс к настройкам по умолчанию и начать сначала. Если изменений много, сначала попробуйте другие варианты, т.к. большинство проблем в любом случае являются ошибками пользователя.
Проверка IP-адреса интерфейса WAN
Откройте веб-интерфейс и проверьте IP-адрес интерфейса WAN маршрутизатора.
- Любой другой IP-адрес интерфейса WAN, скорее всего, является публичным (маршрутизируемым) адресом, на котором просто нужно правильно настроить переадресацию портов.
Тестирование обратной петли
Чтобы проверить открыт ли один определенный порт TCP и UDP с использованием Nmap, используйте следующие параметры:
nmap -sT -sU -p
- Перейдите на страницу Security → Firewall веб-интерфейса DD-WRT.
- Убедитесь, что устройство, на которое выполняется переадресация, прослушивает заданный порт. Т.е. что на компьютере запущена программа, для которой вы пытаетесь перенаправить порт, чтобы она принимала соединения. Если у вас нет программы, прослушивающей порт назначения, он будет закрыт!
- Подключитесь по адресу маршрутизатора : с любого устройства в локальной сети, используя клиентскую программу или сканер портов Nmap.
Если подключение не удалось и обратная петля не заработала, то, скорее всего, на компьютере установлен программный или аппаратный брандмауэр, или между маршрутизатором и компьютером установлен еще один маршрутизатор, не пропускающие соединение. Если подключение удалось, то, скорее всего, между маршрутизатором и провайдером установлен аппаратный брандмауэр или маршрутизатор с функцией NAT, либо провайдер блокирует трафик.
- Временно отключите все брандмауэры и повторите тестирование.
- Если у между маршрутизатором и компьютером находится еще один маршрутизатор, отделяющий сегменты сети, то необходимо настроить первый маршрутизатор для переадресации портов на IP-адрес интерфейса WAN промежуточного маршрутизатора, а уже его — для переадресации на компьютер. После этого попробуйте повторить тест, по очереди указав IP-адреса обоих маршрутизаторов.
- Если вы подозреваете, что интернет-провайдер блокирует трафик, ведь у маршрутизатора есть общедоступный IP-адрес и тест обратной петлей сработал, нужно отключить все маршрутизаторы и подключить компьютер напрямую к линии интернет-провайдера. Если компьютер не получает IP-адрес от провайдера, может потребоваться отключить модем на несколько минут, чтобы освободить привязку MAC-адреса.
- Если переадресация портов по-прежнему не работает, нужно взглянуть на правила iptables, чтобы увидеть, нет ли ошибок или неправильной настройки, или выполнить сброс 30/30/30 и выполнить конфигурацию с самого начала. Вы также можете попросить совета на форуме. Подключитесь к маршрутизатору, используя Telnet или SSH, выполните команды ниже и опубликуйте вывод команды вместе с вопросом в новой теме.
iptables -t nat -vnL PREROUTING iptables -vnL FORWARD
[edit] Interfaces
When using the -i or -o to define the physical interfaces, remember that by default:vlan0 is the 4 LAN ports (K24 Only)vlan1 is the WAN port (K24 Only) or the 4 LAN ports (K26 and K3.x) (ppp0 is the WAN interface when PPPoE is used)vlan2 is the WAN port (K26 and K3.x)eth1 is the WIFIeth2-3 is the WIFI (Dual Radio routers)br0 is a bridge connecting the 4 LAN and the WIFI together
Note: ppp0 is the WAN interface when PPPoE is used. It is also for PPTP VPN connections. This information is from IPv6 page and quoted here: «The detailed configuration steps are targeted toward users with a basic DHCP connection for the WAN part. So, if using PPPoE will require replacing vlan1 with ppp0 in each instance. Other connection types will vary.»
Tip: To list the network interfaces on the router use ‘ifconfig’ on the command line.