Итак, я долгое время пытался настроить сервер как интерфейсный маршрутизатор для моей локальной сети. Это потому, что на моем сервере довольно много мультимедиа, на нем загружено МНОГО, а текущего маршрутизатора просто недостаточно. Не хочу покупать новый роутер, потому что те, которых может хватить, довольно дороги. К счастью, я видел несколько установок, в которых сервер работал как сам маршрутизатор.
Моя новая установка будет выглядеть так:
WAN - IPS -|-> My server -> Home router -> Local computer 1
^ Local computer 2
'- possibly a switch ...
Я поискал и, к счастью, нашел этот учебник, описывающий ту же настройку - сервер OpenSUSE, работающий как маршрутизатор. Тем не менее, я заметил, что руководство немного не так, в основном потому, что у меня на сервере другая версия YaST.
Однако я изо всех сил старался следовать ему, используя команды более низкого уровня (используя терминал), чтобы добиться того же. Это заняло немного больше времени, но я подумал, что результат такой же.
К сожалению, это не сработало.
Вот что мне удалось пока:
Видимо сейчас даже DHCP сервер не работает. Я использую этот DHCP-сервер ISC, но не уверен, что это лучший выбор.
Последнее, что мне нужно, - это каким-то образом соединить или соединить две карты, чтобы я мог получить доступ к Интернету через eth1 с компьютеров, подключенных (через маршрутизатор) к eth0. В учебнике это просто делается с помощью «маскарадинга» или разрешения внутренней зоне (eth0) доступ в Интернет через внешнюю зону (eth1). По-видимому, эта часть одинакова в обеих версиях YaST, моей и той, что описана в руководстве. Я думаю, однако, что это не работает. Я пробовал использовать YaST для настройки, затем использовал терминал, но без разницы.
Я полагаю, маскировка сама по себе может сработать, но компьютеры не подключаются правильно? Или виновата маскировка. В любом случае, используя пинг, я могу пинговать 192.168.0.1 с очень быстрым и успешным ответом.
Что я делаю не так? Смело спрашивайте (скорее всего, я что-то забыл), буду рад ответить ...
iptables -L:
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere state ESTABLISHED
ACCEPT icmp -- anywhere anywhere state RELATED
input_int all -- anywhere anywhere
input_ext all -- anywhere anywhere
input_int all -- anywhere anywhere
LOG all -- anywhere anywhere limit: avg 3/min burst 5 LOG level warning tcp-options ip-options prefix `SFW2-IN-ILL-TARGET '
DROP all -- anywhere anywhere
Chain FORWARD (policy DROP)
target prot opt source destination
TCPMSS tcp -- anywhere anywhere tcp flags:SYN,RST/SYN TCPMSS clamp to PMTU
forward_int all -- anywhere anywhere
forward_ext all -- anywhere anywhere
LOG all -- anywhere anywhere limit: avg 3/min burst 5 LOG level warning tcp-options ip-options prefix `SFW2-FWD-ILL-ROUTING '
DROP all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere state NEW,RELATED,ESTABLISHED
LOG all -- anywhere anywhere limit: avg 3/min burst 5 LOG level warning tcp-options ip-options prefix `SFW2-OUT-ERROR '
Chain forward_ext (1 references)
target prot opt source destination
ACCEPT icmp -- anywhere anywhere state RELATED,ESTABLISHED icmp echo-reply
ACCEPT icmp -- anywhere anywhere state RELATED,ESTABLISHED icmp destination-unreachable
ACCEPT icmp -- anywhere anywhere state RELATED,ESTABLISHED icmp time-exceeded
ACCEPT icmp -- anywhere anywhere state RELATED,ESTABLISHED icmp parameter-problem
ACCEPT icmp -- anywhere anywhere state RELATED,ESTABLISHED icmp timestamp-reply
ACCEPT icmp -- anywhere anywhere state RELATED,ESTABLISHED icmp address-mask-reply
ACCEPT icmp -- anywhere anywhere state RELATED,ESTABLISHED icmp protocol-unreachable
ACCEPT icmp -- anywhere anywhere state RELATED,ESTABLISHED icmp redirect
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
DROP all -- anywhere anywhere PKTTYPE = multicast
DROP all -- anywhere anywhere PKTTYPE = broadcast
LOG tcp -- anywhere anywhere limit: avg 3/min burst 5 tcp flags:FIN,SYN,RST,ACK/SYN LOG level warning tcp-options ip-options prefix `SFW2-FWDext-DROP-DEFLT '
LOG icmp -- anywhere anywhere limit: avg 3/min burst 5 LOG level warning tcp-options ip-options prefix `SFW2-FWDext-DROP-DEFLT '
LOG udp -- anywhere anywhere limit: avg 3/min burst 5 state NEW LOG level warning tcp-options ip-options prefix `SFW2-FWDext-DROP-DEFLT '
DROP all -- anywhere anywhere
Chain forward_int (1 references)
target prot opt source destination
ACCEPT icmp -- anywhere anywhere state RELATED,ESTABLISHED icmp echo-reply
ACCEPT icmp -- anywhere anywhere state RELATED,ESTABLISHED icmp destination-unreachable
ACCEPT icmp -- anywhere anywhere state RELATED,ESTABLISHED icmp time-exceeded
ACCEPT icmp -- anywhere anywhere state RELATED,ESTABLISHED icmp parameter-problem
ACCEPT icmp -- anywhere anywhere state RELATED,ESTABLISHED icmp timestamp-reply
ACCEPT icmp -- anywhere anywhere state RELATED,ESTABLISHED icmp address-mask-reply
ACCEPT icmp -- anywhere anywhere state RELATED,ESTABLISHED icmp protocol-unreachable
ACCEPT icmp -- anywhere anywhere state RELATED,ESTABLISHED icmp redirect
ACCEPT all -- anywhere anywhere state NEW,RELATED,ESTABLISHED
DROP all -- anywhere anywhere PKTTYPE = multicast
DROP all -- anywhere anywhere PKTTYPE = broadcast
LOG tcp -- anywhere anywhere limit: avg 3/min burst 5 tcp flags:FIN,SYN,RST,ACK/SYN LOG level warning tcp-options ip-options prefix `SFW2-FWDint-DROP-DEFLT '
LOG icmp -- anywhere anywhere limit: avg 3/min burst 5 LOG level warning tcp-options ip-options prefix `SFW2-FWDint-DROP-DEFLT '
LOG udp -- anywhere anywhere limit: avg 3/min burst 5 state NEW LOG level warning tcp-options ip-options prefix `SFW2-FWDint-DROP-DEFLT '
reject_func all -- anywhere anywhere
Chain input_ext (1 references)
target prot opt source destination
DROP all -- anywhere anywhere PKTTYPE = broadcast
ACCEPT icmp -- anywhere anywhere icmp source-quench
ACCEPT icmp -- anywhere anywhere icmp echo-request
LOG tcp -- anywhere anywhere limit: avg 3/min burst 5 tcp dpt:ftp flags:FIN,SYN,RST,ACK/SYN LOG level warning tcp-options ip-options prefix `SFW2-INext-ACC-TCP '
ACCEPT tcp -- anywhere anywhere tcp dpt:ftp
LOG tcp -- anywhere anywhere limit: avg 3/min burst 5 tcp dpt:ssh flags:FIN,SYN,RST,ACK/SYN LOG level warning tcp-options ip-options prefix `SFW2-INext-ACC-TCP '
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
LOG tcp -- anywhere anywhere limit: avg 3/min burst 5 tcp dpt:lm-x flags:FIN,SYN,RST,ACK/SYN LOG level warning tcp-options ip-options prefix `SFW2-INext-ACC-TCP '
ACCEPT tcp -- anywhere anywhere tcp dpt:lm-x
LOG tcp -- anywhere anywhere limit: avg 3/min burst 5 tcp dpt:http flags:FIN,SYN,RST,ACK/SYN LOG level warning tcp-options ip-options prefix `SFW2-INext-ACC-TCP '
ACCEPT tcp -- anywhere anywhere tcp dpt:http
ACCEPT udp -- anywhere anywhere udp dpt:lm-x
LOG tcp -- 192.168.0.1 anywhere tcp spt:lm-x dpt:lm-x state NEW limit: avg 3/min burst 5 LOG level warning tcp-options ip-options prefix `SFW2-INext-ACC '
ACCEPT tcp -- 192.168.0.1 anywhere tcp spt:lm-x dpt:lm-x
DROP all -- anywhere anywhere PKTTYPE = multicast
DROP all -- anywhere anywhere PKTTYPE = broadcast
LOG tcp -- anywhere anywhere limit: avg 3/min burst 5 tcp flags:FIN,SYN,RST,ACK/SYN LOG level warning tcp-options ip-options prefix `SFW2-INext-DROP-DEFLT '
LOG icmp -- anywhere anywhere limit: avg 3/min burst 5 LOG level warning tcp-options ip-options prefix `SFW2-INext-DROP-DEFLT '
LOG udp -- anywhere anywhere limit: avg 3/min burst 5 state NEW LOG level warning tcp-options ip-options prefix `SFW2-INext-DROP-DEFLT '
DROP all -- anywhere anywhere
Chain input_int (2 references)
target prot opt source destination
ACCEPT all -- anywhere anywhere
Chain reject_func (1 references)
target prot opt source destination
REJECT tcp -- anywhere anywhere reject-with tcp-reset
REJECT udp -- anywhere anywhere reject-with icmp-port-unreachable
REJECT all -- anywhere anywhere reject-with icmp-proto-unreachable
iptables -t нат -L:
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Конфигурация DHCP-сервера:
authoritative;
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.100 192.168.0.200;
option ip-forwarding on;
default-lease-time 7200;
max-lease-time 86400;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.0.255;
option routers 192.168.0.1;
option domain-name "domain-local.sk"; # I really don't know what should I put here.
option domain-name-servers 192.168.0.1;
}
Возможно, вам просто нужно включить IPv4-пересылку (маршрутизацию) вот так:
эхо 1> / proc / sys / net / ipv4 / ip_forward
(здесь значение по умолчанию 0. Я установил debian в качестве брандмауэра 2 дня назад, и это помогло;))
РЕДАКТИРОВАТЬ
Этот сценарий сохраняет и удаляет все записи в iptables и настраивает базовую конфигурацию для маскировки из внутренней сети.
#!/bin/bash
# saving old iptables-configuration
iptables-save > /home/xxusernamexx/iptables-saved.out
# delete all existing rules and chains
iptables -F
iptables -t nat -F
iptables -X
iptables -Z
iptables -t nat -Z
# setting up masquerade
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
# forwarding for answer-packages from the internet
iptables -A FORWARD -i eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -o eth1 -j ACCEPT
iptables -A FORWARD -j LOG --log-ip-options --log-prefix fwd-drop
iptables -A FORWARD -j DROP
# allowing loopback and internal connections
# uncommend the following line if you want to allow ping from external
iptables -A INPUT -s 0.0.0.0/0 -p tcp --dport 80 -j ACCEPT # for your webserver
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # edited
iptables -A INPUT -p icmp --icmp-type 8 -i eth1 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i eth0 -j ACCEPT # for connections from lan-nic
iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j LOG --log-ip-options --log-prefix io-drop
iptables -A INPUT -j DROP
iptables -A OUTPUT -j ACCEPT # edited
iptables -A OUTPUT -p icmp --icmp-type 0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -j LOG --log-ip-options --log-prefix io-drop
iptables -A OUTPUT -j DROP
# just to make sure that routing is enabled
echo 1 > /proc/sys/net/ipv4/ip_forward
Попробуйте этот сценарий. Я не могу это проверить, потому что мои интерфейсы eth1-eth0 используются по-другому, но я написал этот сценарий на основе моей собственной конфигурации. На всякий случай этот сценарий экспортирует вашу фактическую конфигурацию iptables в вашу домашнюю папку. Его можно восстановить с помощью iptables-restore <имя файла
РЕДАКТИРОВАТЬ: добавлено iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
и удалил -m state --state RELATED,ESTABLISHED
в первом правиле OUTPUT, чтобы позволить серверу устанавливать собственные соединения в каждой сети (то есть для запроса DNS-сервера)
РЕДАКТИРОВАТЬ2: Проблема решена. Было несколько неправильно настроенных вещей:
iptables: Нам пришлось немного изменить сценарий, чтобы он полностью работал (также отредактировал его в моем ответе).
DHCP: dhcpd был настроен на использование 192.168.0.1 в качестве DNS-сервера. Но на сервере не работал DNS-сервер. Настроили его на ISP-DNS-серверы.
Маршрутизатор: Сервер был подключен к WAN-порту маршрутизатора. Это привело к тому, что маршрутизатор сбросил несколько пакетов от клиентов к серверу (и обратно). Аурел подключил его к LAN-порту, и все заработало.