Конфигурация маршрутизатора, которую предложил
sedgar имеет один существенный недостаток - хосты внутренней сети (192.168.1.0/24) и хосты городской сети (10.241.56.0/22) фактически лежат в одной броадкаствой сети. Это означает, что любой желающий, может обратиться к любому хосту внутренней сети, если на своём компьютере укажет статический адрес из её диапазона, например, 192.168.1.135. С точки зрения безопасности это недопустимо.
Предлагаю вариант конфигурации устройства D-Link DSL-2640U (H/W Ver: C1, прошивка RU_1.22) в качестве полноценного маршрутизатора с использованием порта LAN1 в качестве WAN.
Исходныe данные.LAN:
- диапазон: 192.168.138.0/24
- маршрутизатор: 192.168.138.1
- DHCP: 192.168.138.33-192.168.138.223
WAN:
- диапазон: 10.1.0.0/16
- маршрутизатор: 10.1.7.221
- шлюз провайдера: 10.1.1.253
- DNS провайдера: 80.91.160.3
И устройство "D-Link DSL-2640U" (далее по тексту буду называть его "маршрутизатор"), которое заранее сконфигурировано в режиме маршрутизатора (например, PPPoE) и имеет разрешённый к использованию ADSL-WAN интерфейс ("Advanced Setup" --> "WAN" в колонке "State" должно быть значение "Enabled"). Сам ADSL-WAN интерфейс использоваться не будет, но при этом включаются нужные для дальнейшей работы функции ядра операционной системы маршрутизатора, а также появляются некоторые пункты меню web-интерфейса, например, "Advanced Setup" -> "DNS".
Также должен быть сконфигурирован LAN (DHCP и WiFi - по желанию).
Предварительную конфигурацию подробно не расписываю, т.к. это обсуждалось много-много раз.
Конфигурирование LAN1 в качестве WANОтключить физически все интерфейсы маршрутизатора (Ethernet и ADSL) и подключить компьютер, с которого будет производиться конфигурирование в любой Ethernet-порт, кроме 1, т.к. он будет сконфигурирован как внешний (WAN).
Зайти на web-интерфейс машрутизатора (
http://192.168.138.1).
Изолировать интерфейс LAN1: в разделе "Advanced Setup" --> "Interface Group" поставить птицу в поле "Enable virtual ports on" (здесь нужно немного подождать).
И после этого:
- нажать кнопку "Add"
- в поле "Group Name" задать декоративное имя группы портов, например, "Outside"
- в окне "Available Interfaces" выбрать LAN1 (это означает порт 1 встроенного коммутатора)
- нажать кнопку "<-", при этом LAN1 переместится в окно "Grouped Interfaces"
- нажать кнопку "Save/Apply"
Эта настройка сохраняется в маршрутизаторе и интерфейс LAN1 остаётся изолированным даже после перезагрузки маршрутизатора, так что беспокоиться здесь не стоит.
Если вы желаете, чтобы маршрутизатор работал с DNS, например, для синхронизации времени ("Management" --> "Internet Time") или для команды в консоли "ping ya.ru", то через web-интерфейс необходимо указать DNS провайдера. Для этого нужно:
- зайти в раздел "Advanced Setup" -> "DNS"
- снять птицу "Enable Automatic Assigned DNS"
- руками вбить в поле "Primary DNS server" значение 80.91.160.3
- нажать "Save" (сохранить конфигурацию)
- и затем
ОБЯЗАТЕЛЬНО ПЕРЕЗАГРУЗИТЬ маршрутизатор, чтобы изменения вступили в силу.
На этом часть конфигурирования с использованием web-интерфейса закончена.
Теперь заходим в консоль и набираем sh (приглашение должно измениться с ">" на "#"). Далее пишу с комментариями для каждой команды. Комментарий начинается с символа "#".
# Конфигурирование интерфейса br1 (WAN)
ifconfig br1 10.1.7.221 netmask 255.255.0.0 broadcast 10.1.255.255# Добавление маршрута по-умолчанию на шлюз провайдера
route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.1.1.253 metric 1# Очистка таблицы nat
iptables -t nat -F# Собственно, маскарадинг
iptables -t nat -A POSTROUTING -o br1 -s 192.168.138.0/255.255.255.0 -j MASQUERADE# "Проброс" DNS-запросов к маршрутизатору от хостов из LAN на DNS провайдера
iptables -t nat -A PREROUTING -p udp -i br0 -s 192.168.138.0/255.255.255.0 -d 192.168.138.1 --destination-port 53 -j DNAT --to-destination 80.91.160.3#
На этом моменте можно подключить кабель от провайдера к порту 1 и компьютеры из LAN смогут выходить интернет.# Установка максимального размера таблицы NAT и включение маскарадинга для icmp. После этого будет работать "ping ya.ru" изнутри сети.
echo 1024 > /proc/sys/net/ipv4/ip_conntrack_max#
Теперь нужно кое-что ограничить, т.к. если абсолютно всё разрешено, то с точки зрения безопасности это нехорошо.# Таблица filter в командах iptables используется по-умолчанию и явно указывать её не нужно.
# Очистить цепочку INPUT (предназначена для фильтрации пакетов, адресованных самому маршрутизатору, т.е. не транзитных пакетов)
iptables -F INPUT# Принимать любые соединения из внутренней сети
iptables -A INPUT -i br0 -d 192.168.138.1 -s 192.168.138.0/255.255.255.0 -j ACCEPT# Хотя для большей защиты можно ограничить - только dns-запросы, а web, ssh и snmp вообще только с определённых IP, но это отдельная тема.
# Принимать DNS-ответы от провайдера. Нужно только если DNS провайдера был прописан через web-интерфейс.
iptables -A INPUT -i br1 -d 10.1.7.221 -p udp -s 80.91.160.3 --source-port 53 -j ACCEPT# Принимать эхо-запросы из внешней сети, но без фанатизма - первые 8 пакетов сразу, а потом по 1 пакету в 2 секунды, пусть обильно пингующие ломают голову
.
# При пинге с устройств компании Cisco Systems будет такая картина:
# #ping 10.1.7.221 repeat 20
# Type escape sequence to abort.
# Sending 20, 100-byte ICMP Echos to 10.1.7.221, timeout is 2 seconds:
# !!!!!!!!.!.!.!.!.!.!
# Success rate is 70 percent (14/20), round-trip min/avg/max = 1/1/4 ms
iptables -A INPUT -i br1 -d 10.1.7.221 -p icmp --icmp-type echo-request -m limit --limit 30/m --limit-burst 8 --j ACCEPT# Принимать от других маршрутизаторов сообщения "Недостижим" и "Таймаут" соответственно.
iptables -A INPUT -i br1 -d 10.1.7.221 -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -A INPUT -i br1 -d 10.1.7.221 -p icmp --icmp-type time-exceeded -j ACCEPT# Принимать эхо-ответы на свои эхо-запросы (с маршрутизатора)
iptables -A INPUT -i br1 -d 10.1.7.221 -p icmp --icmp-type echo-reply -j ACCEPT# NTP (открываю все) - чтобы синхронизировать часы на маршрутизаторе. Если не нужно, не выполняйте.
iptables -A INPUT -i br1 -d 10.1.7.221 -p udp --source-port 123 -j ACCEPT# Остальное отбрасывать
iptables -A INPUT -i br1 -j DROP# Очистить цепочку FORWARD (предназначена для фильтрации транзитных пакетов, т.е. не адресованных самому маршрутизатору)
iptables -F FORWARD # Маршрутизировать пакеты, которые относятся к уже установленному соединению, либо связаны (являются дополнительными/зависимыми) с уже установленным соединением.
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT# Маршрутизировать любые пакеты из внутренней сети.
iptables -A FORWARD -i br0 -s 192.168.138.0/255.255.255.0 -j ACCEPT# Остальное отбрасывать
iptables -A FORWARD -j DROPВот и всё.
Дополнительно.# Хочу заходить по RDP во внутреннюю сеть на хост 192.168.138.12
iptables -I FORWARD 3 -p tcp -i br1 -d 192.168.138.12 --destination-port 3389 -j ACCEPT
iptables -t nat -I PREROUTING 2 -p tcp -i br1 -d 10.1.7.221 --destination-port 3456 -j DNAT --to-destination 192.168.138.12:3389# В RDP-клиенте нужно набрать 10.1.7.221:3456
---------------------------------------------
# Просмотреть и изменить количество одновременных записей таблицы NAT соответственно.
cat /proc/sys/net/ipv4/ip_conntrack_max
echo 2048 > /proc/sys/net/ipv4/ip_conntrack_max
# Просмотреть текущие записи таблицы NAT
cat /proc/net/ip_conntrack---------------------------------------------
# Хочу по DHCP раздавать ещё какие-то опции.
# Читаем
http://svn.dd-wrt.com:8000/dd-wrt/browser/src/router/busybox/examples/udhcp/udhcpd.conf?rev=9719 (или что-нибудь посвежее), и формируем заново файл конфигурации "/var/udhcpd/udhcpd.conf" со своими опциями.
echo "start 192.168.138.33" > /var/udhcpd/udhcpd.conf
echo "end 192.168.138.223" >> /var/udhcpd/udhcpd.conf
echo "interface br0" >> /var/udhcpd/udhcpd.conf
echo "decline_file /var/udhcpd.decline" >> /var/udhcpd/udhcpd.conf
echo "option lease 86400" >> /var/udhcpd/udhcpd.conf
echo "option min_lease 30" >> /var/udhcpd/udhcpd.conf
echo "option subnet 255.255.255.0" >> /var/udhcpd/udhcpd.conf
echo "option router 192.168.138.1" >> /var/udhcpd/udhcpd.conf
echo "option dns 80.91.160.3" >> /var/udhcpd/udhcpd.conf# После чего нужно найти номер (PID) процесса dhcpd
ps# Прибить его
kill номер_процесса# И запустить заново
dhcpd---------------------------------------------
# Можно сравнить значения в колонках "used" и "free" до и после команды "
cat /proc/accumem". Из области шаманства.
sysinfo
cat /proc/accumem
sysinfo---------------------------------------------
Недостатки и ограничения1. Не смог придумать, как сохранить данные настройки. Вероятно, это связано с моими крайне скудными познаниями ОС Linux. Посему каждый раз после перезагрузки маршрутизатора консольные команды приходится вводить заново (неважно как, вручную в режиме "copy-paste" или автоматизированно, тем же "Router Commander'ом").
2. Не следует ожидать высокой производительности. Маршрутизатор рассчитан всё таки на ADSL скорости. Мои тесты показали максимальную скорость TCP-трафика (обычное копирование файла по сети в один поток) через NAT:
- в направлении WAN-->LAN около 3.7 мегабайта в секунду (грубо 37Mbps)
- в направлении LAN-->WAN около 3.3 мегабайта в секунду (грубо 33Mbps)
Как бы там ни было, настройка порта LAN1 в качестве полноценного WAN интерфейса - возможна.
Для вас старался DAurum.P.$. Также работает с прошивками RU_1.24 и RU_1.25.