Servidor do OpenSUSE 11 como um roteador

1

Então, estou tentando há mais tempo configurar o servidor como roteador de front-end para minha rede local. É porque o meu servidor tem um monte de multimídia baixado muito, eo roteador atual não é suficiente. Eu não quero comprar um novo roteador, porque aqueles que podem ser suficientes são bastante caros. Felizmente, vi algumas configurações em que o servidor funciona como o próprio roteador.

Minha nova configuração ficaria assim:

WAN - IPS -|-> My server -> Home router -> Local computer 1
             ^                             Local computer 2
             '- possibly a switch          ...

Eu fiz uma pesquisa e, felizmente, encontrei o este tutorial , descrevendo o mesma configuração - um servidor OpenSUSE funcionando como um roteador. No entanto, notei que o tutorial está um pouco errado, principalmente porque tenho uma versão diferente do YaST no meu servidor.

No entanto, eu tentei o meu melhor para segui-lo, usando comandos de nível inferior (usando terminal) para realizar o mesmo. Demorou um pouco mais, mas achei que o resultado foi o mesmo.

Infelizmente, não funcionou.

Isso é o que eu consegui até agora:

  • Duas placas de rede, uma a bordo, uma um dispositivo PCI, sendo executada em / dev / eth0 (interna e interna) e / dev / eth1 (PCI, externa).
  • eth1 é definido com o endereço DHCP, adquire facilmente o endereço IP do ISP (eu tenho um estático, então é sempre o mesmo) e se conecta. Este definitivamente funciona, porque eu posso usar a internet no próprio servidor.
  • eth0 é definido com um IP estático de 192.168.0.1.
  • Servidor DHCP, em execução no eth0 - funciona, computadores conectados obtêm endereços IP, mesmo que o servidor DHCP no roteador esteja desligado.

Aparentemente, agora nem o servidor DHCP funciona. Eu estou usando este servidor ISC DHCP, não tenho certeza se é a melhor escolha.

A última parte que eu preciso é de alguma forma ligar ou conectar os dois cartões, para que eu possa acessar a internet via eth1 de computadores conectados (através do roteador) para eth0. No tutorial isso é feito apenas usando "masquerading", ou permitindo que a zona interna (eth0) acesse a internet através da zona externa (eth1). Aparentemente, essa parte é a mesma em ambas as versões do YaST, a minha e a do tutorial. Eu acho que, no entanto, isso não funciona. Eu tentei usar o YaST para configurar isso, então usei terminal, mas sem diferença.

Suponho que o próprio mascaramento funcione, mas os computadores não se conectam corretamente? Ou é culpa de se disfarçar. De qualquer forma, usando ping, eu posso pingar 192.168.0.1 com uma resposta muito rápida e bem sucedida.

O que estou fazendo de errado? Por favor, sinta-se livre para perguntar qualquer coisa (provavelmente eu esqueci alguma coisa), eu ficaria feliz em responder ...

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 nat -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

Configuração do servidor 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;
}
    
por Aurel Bílý 24.04.2011 / 11:52

1 resposta

1

Talvez você só precise ativar o encaminhamento de IPv4 (roteamento) assim:

echo 1 > / proc / sys / net / ipv4 / ip_forward

(o valor padrão é 0 lá. Eu configurei o debian como um firewall 2 dias atrás e isso ajudou;))

EDITAR

Este script salva e exclui todas as entradas em seus iptables e configura uma configuração básica para mascarar a partir da rede interna.

#!/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

Experimente este script. Eu realmente não posso testá-lo, porque minhas interfaces eth1-eth0 são usadas de outra maneira, mas eu escrevi este script baseado em minha própria configuração. Para ser salvo, este script exporta sua configuração real do iptables para sua pasta pessoal. Pode ser recuperado usando iptables-restore < nome do arquivo

EDIT : adicionou iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT e excluiu -m state --state RELATED,ESTABLISHED na primeira regra do OUTPUT para permitir que o servidor faça suas próprias conexões em cada rede (por exemplo, para consultar um servidor DNS)

EDIT2 : O problema está resolvido. Havia algumas coisas mal configuradas:

iptables : Tivemos que alterar o script um pouco para que ele funcionasse totalmente (editei na minha resposta também).

DHCP : o dhcpd foi configurado para usar '192.168.0.1' como servidor DNS. Mas o servidor não executou um servidor DNS. Nós configuramos para ISP-DNS-servers.

Roteador : O servidor estava conectado na porta WAN do roteador. Isso levou o roteador a remover vários pacotes dos clientes para o servidor (e vice-versa). Aurel ligou-o a uma porta LAN e funcionou.

    
por 24.04.2011 / 11:59