Como transformar um servidor Linux em um roteador para lidar com o tráfego estaticamente e dinamicamente - parte 10
- 731
- 210
- Leroy Lebsack
Como antecipamos nos tutoriais anteriores disso LFCE (Engenheiro Certificado da Fundação Linux) Série, neste artigo, discutiremos o roteamento do tráfego de IP estaticamente e dinamicamente com aplicativos específicos.
Engenheiro Certificado da Fundação Linux - Parte 10Apresentando o Programa de Certificação da Fundação Linux
Primeiras coisas primeiro, vamos entender algumas definições:
- Em palavras simples, um pacote é a unidade básica usada para transmitir informações dentro de uma rede. As redes que usam TCP/IP como protocolo de rede seguem as mesmas regras para transmissão de dados: as informações reais são divididas em pacotes feitos de dados e o endereço onde devem ser enviados para.
- Roteamento é o processo de “guia”Os dados de origem para destino dentro de uma rede.
- Roteamento Estático requer um conjunto de regras configuradas manualmente definidas em uma tabela de roteamento. Essas regras são consertadas e usadas para definir a maneira como um pacote deve passar à medida que viaja de uma máquina para outra.
- Roteamento dinâmico, ou roteamento inteligente (se desejar), significa que o sistema pode alterar automaticamente, conforme necessário, a rota que um pacote segue.
Configuração avançada de IP e dispositivo de rede
O iProute O pacote fornece um conjunto de ferramentas para gerenciar redes e controle de tráfego que usaremos ao longo deste artigo, pois eles representam a substituição de ferramentas herdadas, como ifconfig e rota.
A utilidade central no iProute A suíte é chamada de simplesmente IP. Sua sintaxe básica é a seguinte:
# comando de objeto ip
Onde objeto pode ser apenas um dos seguintes (apenas os objetos mais frequentes são mostrados - você pode se referir ao homem IP Para uma lista completa):
- link: dispositivo de rede.
- addr: endereço protocolo (IP ou IPv6) em um dispositivo.
- rota: entrada de tabela de roteamento.
- regra: regra no banco de dados de políticas de roteamento.
Enquanto comando representa uma ação específica que pode ser executada no objeto. Você pode executar o seguinte comando para exibir a lista completa de comandos que podem ser aplicados a um objeto específico:
# Ajuda do objeto IP
Por exemplo,
# IP Link AjudaAjuda do comando IP
A imagem acima mostra, por exemplo, que você pode alterar o status de uma interface de rede com o seguinte comando:
# IP Link Set Interface UP | abaixo
Para mais exemplos de 'IP'Comando, leia 10 comandos' ip 'úteis para configurar o endereço IP
Exemplo 1: Desativar e ativar uma interface de rede
Neste exemplo, iremos desativar e habilitar Eth1:
# Link IP Show # Link IP Set Eth1 Down # IP Link ShowDesative a interface eth0
Se você quiser reativar o eth1,
# Link IP Definir eth1 up
Em vez de exibir todas as interfaces de rede, podemos especificar um deles:
# link IP Show Eth1
Que retornará todas as informações para Eth1.
Exemplo 2: Exibindo a tabela de roteamento principal
Você pode visualizar sua tabela de roteamento principal atual com um dos três comandos a seguir:
# IP Route Show # Route -n # netstat -rnVerifique a tabela de rota Linux
A primeira coluna na saída dos três comandos indica a rede de destino. A saída de rota IP show (seguindo a palavra -chave Dev) também apresenta os dispositivos de rede que servem como porta de entrada física para essas redes.
Embora hoje em dia o comando ip é preferido na rota, você ainda pode se referir ao homem Route IP e Rota do homem Para uma explicação detalhada do restante das colunas.
Exemplo 3: Usando um servidor Linux para rotear pacotes entre duas redes privadas
Queremos rotear ICMP Pacotes (ping) do dev2 para Dev4 e o contrário também (observe que as duas máquinas clientes estão em redes diferentes). O nome de cada NIC, juntamente com seu endereço IPv4 correspondente, é fornecido dentro de suportes quadrados.
Nosso ambiente de teste é o seguinte:
Cliente 1: Centos 7 [ENP0S3: 192.168.0.17/24] - Dev1 Roteador: Debian Wheezy 7.7 [Eth0: 192.168.0.15/24, Eth1: 10.0.0.15/24] - Dev2 Cliente 2: OpenSuse 13.2 [ENP0S3: 10.0.0.18/24] - Dev4
Vamos visualizar a tabela de roteamento em Dev1 (CentOS Box):
# IP Route Show
e depois modifique -o para usar seu ENP0S3 NIC e a conexão com 192.168.0.15 para acessar hosts nos 10.0.0.Rede 0/24:
# rota IP Adicionar 10.0.0.0/24 via 192.168.0.15 DEV ENP0S3
Que lê essencialmente: “Adicione uma rota aos 10.0.0.Rede 0/24 através da interface de rede ENP0S3 usando 192.168.0.15 como gateway ”.
Rede de rota no LinuxDa mesma forma em Dev4 (caixa de openuse) para hosts de ping nos 192.168.0.Rede 0/24:
# rota IP Adicionar 192.168.0.0/24 via 10.0.0.15 DEV ENP0S3Roteamento de rede no Linux
Finalmente, precisamos permitir o encaminhamento em nosso roteador Debian:
# eco 1>/proc/sys/net/ipv4/ip_forward
Agora vamos Ping:
Verifique o roteamento da redee,
Rota ping statusPara tornar essas configurações persistentes nas botas, edite /etc/sysctl.conf no roteador e verifique se o líquido.IPv4.ip_forward A variável é definida como true da seguinte maneira:
líquido.IPv4.ip_forward = 1
Além disso, configure as NICs em ambos os clientes (procure o arquivo de configuração dentro /etc/sysconfig/rede no OpenSuse e /etc/sysconfig/scripts de rede em Centos - em ambos os casos, é chamado IFCFG-NP0S3).
Aqui está o arquivo de configuração da caixa OpenSuse:
BootProto = transmissão estática = 10.0.0.255 ipaddr = 10.0.0.18 máscara de rede = 255.255.255.0 gateway = 10.0.0.15 Nome = ENP0S3 Rede = 10.0.0.0 onboot = sim
Exemplo 4: Usando um servidor Linux para rotear pacotes entre redes privadas e internet
Outro cenário em que uma máquina Linux pode ser usada como roteador é quando você precisa compartilhar sua conexão com a Internet com uma LAN particular.
Roteador: Debian Wheezy 7.7 [Eth0: Public IP, Eth1: 10.0.0.15/24] - Dev2 Cliente: OpenSuse 13.2 [ENP0S3: 10.0.0.18/24] - Dev4
Além de configurar o encaminhamento de pacotes e a tabela de roteamento estático no cliente, como no exemplo anterior, precisamos adicionar algumas regras iptables no roteador:
# iptables -t nat -a postouting -o eth0 -j mascarerade # iptables -a forward -i eth0 -o eth1 -m estado -estado relacionado, estabelecido -j aceita # iptables -a forward -i eth1 -o eth0 -j ACEITAR
O primeiro comando adiciona uma regra ao Pós -trouting Cadeia na tabela NAT (Tradução de Endereço de Rede), indicando que a NIC ETH0 deve ser usada para pacotes de saída.
MASCARADA indica que esta NIC tem um IP dinâmico e isso antes de enviar o pacote para o “mundo selvagem selvagem”Da Internet, o endereço de origem privada do pacote deve ser alterado para o do IP público do roteador.
Em uma LAN com muitos hosts, o roteador acompanha as conexões estabelecidas em /proc/net/ip_conntrack Então ele sabe onde devolver a resposta da Internet a.
Apenas parte da saída de:
# cat/proc/net/ip_conntrack
é show na captura de tela seguinte.
Pacotes de rota no LinuxOnde a origem (IP privada da caixa de openuse) e destino (Google DNS) de pacotes são destacados. Este foi o resultado da corrida:
# Curl www.Tecmint.com
na caixa de openuse.
Como tenho certeza que você já pode adivinhar, o roteador está usando o 8 do Google.8.8.8 Como servidor de nomes, o que explica por que o destino dos pacotes de saída aponta para esse endereço.
Observação: Que os pacotes recebidos da Internet são aceitos apenas se eles fizerem parte de uma conexão já estabelecida (comando nº 2), enquanto os pacotes de saída são permitidos “saída grátis”(Comando #3).
Não se esqueça de tornar suas regras iptables persistentes após as etapas descritas na Parte 8 - Configure o firewall iptables desta série.
Roteamento dinâmico com quagga
Atualmente, a ferramenta mais usada para roteamento dinâmico no Linux é Quagga. Ele permite que os administradores do sistema implementem, com um servidor Linux relativamente de baixo custo, a mesma funcionalidade fornecida por roteadores Cisco poderosos (e caros).
A ferramenta em si não lida com o roteamento, mas modifica a tabela de roteamento do kernel, pois aprende novas melhores rotas para lidar com pacotes.
Como é um garfo de zebra, um programa cujo desenvolvimento cessou há um tempo atrás, mantém por razões históricas os mesmos comandos e estrutura que a zebra. É por isso que você verá muita referência à zebra a partir deste ponto.
Observe que não é possível cobrir o roteamento dinâmico e todos os protocolos relacionados em um único artigo, mas estou confiante de que o conteúdo apresentado aqui servirá como ponto de partida para você construir.
Instalando Quagga no Linux
Para instalar o Quagga na distribuição escolhida:
# Aptitude Update && Aptitude Install Quagga [no ubuntu] # yum update && yum install quagga [centos/rhel] # zypper refresh && zypper install quagga [openSuse]
Usaremos o mesmo ambiente do Exemplo #3, com a única diferença de que o ETH0 está conectado a um roteador de gateway principal com IP 192.168.0.1.
Em seguida, edite /etc/quagga/daemons com,
zebra = 1 ripd = 1
Agora crie os seguintes arquivos de configuração.
#/etc/quagga/zebra.conf #/etc/quagga/ripd.conf
e adicione essas linhas (substitua um nome de host e senha de sua escolha):
serviço quagga reinictar hostname dev2 senha quagga
# Service Quagga reiniciarInicie o serviço Quagga
Observação: Que RIPD.conf é o arquivo de configuração para o protocolo de informações de roteamento, que fornece ao roteador as informações de quais redes podem ser alcançadas e até que ponto (em termos de quantidade de lúpulo) eles são.
Observe que este é apenas um dos protocolos que podem ser usados junto com Quagga, e eu o escolhi para este tutorial devido à facilidade de uso e porque a maioria dos dispositivos de rede o suporta, embora tenha a desvantagem de passar credenciais em texto sem formatação. Por esse motivo, você precisa atribuir permissões adequadas ao arquivo de configuração:
# chown quagga: quaggavty/etc/quagga/*.conf # chmod 640/etc/quagga/*.conf
Exemplo 5: Configurando Quagga para rotear o tráfego IP dinamicamente
Neste exemplo, usaremos a seguinte configuração com dois roteadores (certifique -se de criar os arquivos de configuração para roteador #2 Como explicado anteriormente):
Configure QuaggaImportante: Não se esqueça de repetir a seguinte configuração para os dois roteadores.
Conecte -se à zebra (ouvindo na porta 2601), que é o intermediário lógico entre o roteador e o kernel:
# Telnet localhost 2601
Digite a senha que foi definida no /etc/quagga/zebra.conf Arquivo e, em seguida, habilite a configuração:
ativar o terminal de configuração
Digite o endereço IP e a máscara de rede de cada NIC:
Inter eth0 ip addr 192.168.0.15 Inter eth1 ip addr 10.0.0.15 saída de saída escrevaConfigure o roteador
Agora precisamos nos conectar ao RASGAR Terminal Daemon (Porta 2602):
# Telnet localhost 2602
Insira o nome de usuário e a senha, conforme configurado no /etc/quagga/ripd.conf Arquivo e, em seguida, digite os seguintes comandos em negrito (os comentários são adicionados por uma questão de esclarecimento):
habilitar liga o comando de modo privilegiado. Configurar terminal Alterações no modo de configuração. Este comando é o primeiro passo para a configuração roteador RIP Ativa o RIP. Rede 10.0.0.0/24 Define a interface de ativação do RIP para o 10.0.0.Rede 0/24. saída saída escrever Grava a configuração atual no arquivo de configuração.Ativar roteador
Observação: Que em ambos os casos a configuração é anexada às linhas que adicionamos anteriormente (/etc/quagga/zebra.conf e /etc/quagga/ripd.conf).
Finalmente, conecte -se novamente ao serviço de zebra nos dois roteadores e observe como cada um deles tem “aprendido”A rota para a rede que está por trás da outra e que é o próximo salto para chegar a essa rede, executando o comando mostre rota IP:
# mostre rota IPVerifique o roteamento IP
Se você deseja experimentar diferentes protocolos ou configurações, consulte o site do projeto Quagga para mais documentação.
Conclusão
Neste artigo, explicamos como configurar o roteamento estático e dinâmico, usando um (s) roteador (s) da caixa Linux. Sinta -se à vontade para adicionar quantos roteadores desejar e experimentar o quanto quiser. Não hesite em voltar para nós usando o formulário de contato abaixo se tiver algum comentário ou dúvida.
Torne -se um engenheiro certificado Linux- « Como configurar um firewall iptables para permitir o acesso remoto aos serviços no Linux - Parte 8
- Configurando o Squidguard, permitindo regras de conteúdo e analisando logs de lula - Parte 6 »