Funtoo Linux Networking/pt-br

< Funtoo Linux Networking
Revision as of 21:16, June 21, 2015 by Tocadotux (Talk | contribs) (How It Works)

Esse documento explica como configurar suas configurações de rede ao explicar a funcionalidade de configuração de rede (network configuration functionality) disponível no Funtoo Linux. Também está coberto aqui sobre configuração dhcpcd 5.x, Wi-Fi (IEEE 802.11), e o framework OpenResolv.

Apresentação

Funtoo Linux possui seu próprio sistema central de (core network configuration system) que difere um pouco de sistemas de configuração de rede utilizado em Gentoo Linux e em OpenRC.

Nessa documentação, explicarei as únicas adições e alterações no Funtoo network configuration e mostrar como utilizar o sistema para configurar sua rede.

Também explicarei como utilizar o dhcpcd para gerenciar interfaces de rede em redes baseadas em DHCP, e também cobrirei a configuração do OpenRC stacked runlevel configuration, configuração Wi-Fi (IEEE 802.11), e o framework OpenResolv, que é habilitado no Funtoo Linux por padrão.

Uma breve apresentação ao Funtoo Network Configuration

Antes que eu entre em detalhes técnicos de configurar sua rede, é importante entender que o Funtoo Linux possui um número de opções diferentes disponíveis para que você configure a rede, como ainda mais recursos a serem adicionados no futuro. Cada approach é diferente e possui suas próprias forças e fraquezas, e isso, na minha opinião, uma boa coisa.

O Jeito (Dinâmico) Fácil

Quando configurar sua rede, uma opção é pular a configuração de rede tradicional e simplesmente contar depender do DHCP. Esse é de longe o método mais simples de configurar sua rede. Se você estiver em uma rede cabeada, outros passos não são tipicamente exigidos além de habilitar um DHCP client, e o Funtoo Linux inclui dhcpcd 6.x por padrão.

Network Manager, Wicd

Se caso você for utilizar um pacote third party tal qual Network Manager ou Wicd para gerenciar sua rede, então você não precisa configurar DHCP de modo algum. Esses pacotes configuram DHCP para você. Simplesmente execute um emerge no pacote que você quer utilizar e comece a utilizá-lo.

DHCP-Only Systems

Se você não estiver planejando utilizar um pacote third-party para gerenciar suas interfaces de rede, é ainda extremamente fácil configurar rede DHCP, especialmente se você sempre utiliza DHCP para conectar às redes, que é comum para desktops ou laptops. Nesse cenário, podemos simplesmente habilitar dhcpcd para ser executado na inicialização do sistema (system startup). Ele será executado em plano de fundo e automaticamente procurará por servidores DHCP em toda a suas interfaces de rede, e tentará to gerar o enlace de um endereço IP a partir de quaisquer servidor DHCP encontrado.

Se isso soa como o que vocẽ quer fazer, então adicione dhcpcd á suas runlevel padrões como a seguir:

# rc-update add dhcpcd default

Para habilitar o DHCP imediatamente, você seguiria o comando anterior com um comando rc, que iniciaria o cliente dhcpcd que você acabou de adicionar:

# rc

Se você estiver em uma rede cabeada e os drivers necessários no seu kernel, então isso deve bastar para você. Para redes sem fio, mois passos são necessários para para utilizar seu hardware de rede sem fio para assim associá-lo a um access point, que terá uma cobertura mais adiante nessa documentação.

Tweaking Dhcpcd

Por hora, é importante notar que o dhcpcd 6.x gerenciará todas as interfaces de rede disponíveis por padrão. Se você quiser executar um cliente DHCP em todas, menos uma interface, ou alguma outra subset de interfaces, você pode adicionar a denyinterfaces apropriada ou allowinterfaces glob pattern no /etc/dhcpcd.conf:

# manage all interfaces but eth0 with dhcpcd (gerencia todas as interfaces, exceto a eth0 com o dhcpcd)
denyinterfaces eth0

Isso pode ser realizado também ao modificar /etc/init.d/dhcpcd diretamente e adicionar -Z ifglob ou -z ifglob (os parâmetros equivalentes para comando) em command_args.

Utilizando os scripts Funtoo para o DHCP

Você pode também utilizar o Funtoo Linux networking scripts para iniciar um cliente DHCP apenas em uma interface específica. Esse acesso é melhor se você está planejando também fazer algum bridging avançado, bonding ou configuração VLAN em sua máquina com o DHCP, já que você estará utilizando o Funtoo Linux networking scripts para isso também.

Para utilizar esse acesso variante, não habilite /etc/init.d/dhcpcd diretamente. Ao invés disso, utilize o Funtoo Linux dhcpcd template que iniciará o dhcpcd em uma única interface. Abaixo, você verá os passos para fazer isso. Isso é muito similar a como realizamos configurações avançadas de interfaces de rede, que cobriremos mais adiante nessa documentação:

# cd /etc/init.d
# ln -s netif.tmpl netif.eth0
# rc-update add netif.eth0 default
# echo template=dhcpcd > /etc/conf.d/netif.eth0
# rc

O último comando, rc, faz com que o netif.eth0 seja habilitada.

Configuração de Rede no Servidor

Para servidores e cenários avançados em redes, Funtoo Linux oferece seu próprio sistema de configuração de rede modular baseado em template. Esse sistema oferece um monte de flexibilidade para a configuração de interfaces de rede, essencialmente servindo como um "kit de construção de interface de rede." Esse sistema pode ser utilizado por si só, ou mesmo combinado com o dhcpcd, como mostrado na seção anterior.

Aqui estão os componentes chave do sistema de configuração de rede baseado em template:

/etc/init.d/netif.lo
Um script init que configura a interface localhost. Esse script sempre é habilitado e é parte do processo de boot.
/etc/netif.d
Esse é um diretório que contem vários templates de configuração de rede. cada um desses templates é focado em configurar um tipo particular de interface de rede, tal como uma interface baseada em IP estático, uma interface bridge, uma interface bond, etc.
/etc/init.d/netif.tmpl
Essa é a master init script para sistema de configuração de rede baseada em template. Novas interfaces são adicionadas ao seu sistema ao criar links simbólicos a esse arquivo em /etc/init.d.

Então, se você quisesse utilizar esse sistema para configurar eth0 como um endereço de IP estático, você criaria um symlink netif.eth0 ao netif.tmpl como a seguir:

# cd /etc/init.d
# ln -s netif.tmpl netif.eth0

Depois, você criaria um arquivo de configuração /etc/conf.d/netif.eth0 que especificaria qual template utilizar a partir do diretório /etc/netif.d:

template="interface"
ipaddr="10.0.1.200/24"
gateway="10.0.1.1"
nameservers="10.0.1.1 10.0.1.2"
domain="funtoo.org"

Para completar nossa configuração de rede por Ip estático precisaríamos:

# rc-update add netif.eth0 default

Quando configurar seua própria interface de rede estática, um de ipaddr ou ipaddrs é exigido e deve especificar o(s) endereço(s) IP para configurar para essa interface, no formato "a.b.c.d/netmask". Parâmetros opcionais incluem gateway, que define um gateway padrão para sua rede inteira, e se configuração deve especificar o endereço de IP do gateway. Adicional, domain e nameservers (separado por espaço se mais tiver mais que uma) pode ser utilizado para especificar informação de DNS para essa interface.

Variáveis de Configurações

Variáveis de Interface

As variáveis ipaddr e ipaddrs possuem suporte as templates interface e bridge, e são utilizadas para especificar um único ou múltiplos endereços IPv4 ou IPv6 para a interface. Endereços IP devem ser especificados no formato 'IP/netmask', Tal como 10.0.0.1/24. Múltiplos endereços IP podem ser especificados delimitados com espaço em branco:

ipaddrs="10.0.0.1/24 10.0.0.2/24"
Endereços de Broadcast

Por padrão, um endereço broadcast será calculado ni endereço IP e na mascara de rede (network mask). Se você precisar de manualmente especificar um endereço broadcast, utilize o seguinte formato para o seu endereço:

ipaddrs="10.0.0.1/24;broadcast=10.0.1.255 10.0.0.2/24"
Não Especificando Um Endereço

Note que em alguns casos, você pode escolher não especificar ipaddr ou ipaddrs para um template bridge. Isso é permitido. Se você não quiser especificar um endereço IP para uma interface regular, você pode escolher utilizar o template interface sem um endereço de IP especificado no config, ou utilizar o template interface-noip ao invés disso, por questão de claridade.

Visualizando Todos os Endereços IP Configurados

Note também que se você especificar múltiplos endereços IPv4, ifconfig mostrará somente o primeiro endereço IP. Para visualizar todos os endreços IP associados a interface, utilize o comando ip addr show.

Variáveis Gerais

As variáveis a seguir são habilitadas por padrão por padrão para todos os scripts de rede, e se especificado apontará uma ação de configuração correspondente:

nameservers
Define DNS nameservers utilizando OpenResolv. Especifique múltiplos IPv4 ou IPv6 nameservers assim: "1.2.3.4 1.2.3.5 1.2.3.6". Note que o OpenResolv trata 127.0.0.1 especialmente, e indica que você está executado um local name resolver como dnsmasq ou bind. OpenResolv ignorará todas as outras name servers especificadas ao lado de 127.0.0.1. Veja man resolvconf e man resolvconf.conf para informações adicionais de configuração.
search
Define informação de busca de DNS utilizandoOpenResolv.
domain
Define domínio DNS utilizando OpenResolv.
gateway
Define umgateway IPv4 padrão nessa interface.
gateway6
Define um gateway IPv6 padrão nessa interface.
route
Especifica uma lista de routes IPV4 delimitados por um ponto e vírgula a ser aplicada quando essa interface for inicializada. Será fixado ao ip -4 route add.
route6
Specifica uma lista de routes IPV6 delimitado por ponto e virgula para aplicar quando essa interface for inicializada. Será fixado ao ip -6 route add.
mtu
Defint Maximum Transmit Unit para a interface
mac_replace
Substitui o endereço MAC existente especificado nessa variável.

Variáveis VLAN

O suporte a VLAN é habilitado por padrão para todos os scripts de configuração de rede. Se um script de rede possui um nome no formato netif.ethX.Y, então é presumido que seja uma interface VLAN referencing trunk ethX e VLAN ID Y. Se você deseja um nome personalizado para a sua interface VLAN, você pode nomear sua interface seja para qual nome você gostaria e especificar as seguintes variáveis em seu interface config:

trunk
VLAN trunk interface, e.g. "eth0"
vlan
VLAN id, e.g. "32"

Bridge / Variáveis Tap (Torneira)

As variáveis a seguir para configuração de uma interface bridge funcional com interfaces tap opcionais:

slaves
Define interfaces slave dessa interface (para bridges, etc.) Todas as slaves serão automaticamente dependentes, e também terão automaticamente suas definições mtu para aquela da interface atual, se uma mtu for especificada para a interface atual. Essa configurações são necessária para o template bond e é opcional para o template bridge.
stp
Habilita o protocolo Spanning Tree em uma interface bridge assim "stp=on"
forwarding
Habilita o forwarding em uma interface bridge ao invocar sysctl; como essa interface não existe quando sysctl for invocado pela init, fazemos isso aqui. Se essa for desabilitada, sua bridge não direcionará o tráfego de volta na rede. uso: "forwarding=1"

OpenResolv e resolv.conf

OpenResolv será utilizado para definir informação DNS fornecido pelas variáveis nameservers, domain e search quando uma interface for habilitada. o framework OpenResolv adicionará entradas ao /etc/resolv.conf, e também cuidará de remover essa entradas quando a interface for interrompida. Dessa maneira, /etc/resolv.conf deve sempre conter informações atuais e não deve precisar ser manualmente editada pelo administrador do sistema. dhcpcd utilizara o OpenResolv para a atualização de informação de DNS do sistema também.

Serviços Dependentes de Rede (Network-Dependent Services)

Uma diferença importante entre o Gentoo Linux e o Funtoo Linux é que, no Funtoo Linux, network-dependent services dependem estritamente somente de netif.lo. Isso significa que se outro serviço de rede requer que uma interface seja habilitada, tal como samba necessitado da eth0, então o administrador do sistema deve especificar essa relação ao adicionar a seguinte linha em /etc/conf.d/samba:

rc_need="netif.eth0"

Isso terá o efeito de certificar que netif.eth0 é inicializada prioridade para o samba e que o samba é interrompido is ao parar netif.eth0.

Muitos serviços de rede, especialmente aquelas que escutam em todas as interfaces de rede, não precisa de uma linha rc_need a fim de funcionar corretamente. Evitando o uso do rc_need quando exigido otimizará boot times e permitirá que mais serviços de rede estejam disponíveis quando as interfaces de rede foram habilitadas e desabilitadas/interrompidas pelo administrador do sistema.

Múltiplas Configurações de Rede

Para informações de como obter múltiplas e independente configurações de rede, por favor verifique Stacked Runlevels.

Configs Alternados

Se você precisar executar o mesmo serviço com parâmetros de configurações diferentes dependendo do runlevel, então você será feliz em sabem que você pode especificar arquivos config.d de runlevel específico ao anexar um . <runlevel> suffix. Nesse exemplo em particular, poderíamos imaginar uma situação onde teríamos dois child runlevels nomeados home e work:

/etc/conf.d/netif.eth0.home
/etc/conf.d/netif.eth0.work
Note que esse recurso funciona para todos os scripts init, não somente scripts de configuração de rede.

Interface Renaming

Os scripts de rede do Funtoo agora possuem suporte a interface renaming, então você pode gerar uma interface chamada lan caso queira. Para fazer isso, simplesmente especifiquei o endereço de máquina da interface que você gostaria de renomear utilizando a variável macaddr:

macaddr="00:15:17:19:b6:a3"
se esse endereço de máquina for parte do do arquivo de configuração netif.lan, então quando essa interface inicializar, seja qual for a interface atual que tenha o endereço de máquina de 00:15:17:19:b6:a3 (i.e. eth5) será renomeado para lan prior to the interface being brought up, and will show up in ifconfig and ip commands as being an interface named lan. It is possible to combine this with the mac_replace variable to set a new MAC address, if desired.

Configuração Básica de VLAN

O template padrão interface pode suporte a VLANs. Para utilizar suporte a VLAN, primeiro certifique-se de que seu kernel foi compilado com, suporte a VLAN (o nome do módulo é 8021q) :

# grep CONFIG_VLAN /usr/src/linux/.config
CONFIG_VLAN_8021Q=m
CONFIG_VLAN_8021Q_GVRP=y

Depois, configure a interface trunk utilizando o template interface-noip. Assumindo que eth1 está em trunk, você criaria o arquivo /etc/conf.d/netif.eth1 com os seguintes conteúdos:

template="interface-noip"

Depois, gere o link simbólico da interface de rede para o trunk e adicione-o ao seu runlevel padrão:

# cd /etc/init.d
# ln -s netif.tmpl netif.eth1
# rc-update add netif.eth1 default

Agora, assumindo que você queira configurar uma VLAN of 32,você geraria um arquivo config com o nome /etc/conf.d/netif.eth1.32 que pareça com algo assim:

template="interface"
ipaddr="1.2.3.4/24"
gateway="1.2.3.1"# etc...

Depois, gere um link simbólico de interface de rede VLAN e adicione-o ao seu runlevel padrão:

# cd /etc/init.d
# ln -s netif.tmpl netif.eth1.32
# rc-update add netif.eth1.32 default

Os scripts de configuração rede do Funtoo automaticamente reconhecerão o filename netif.eth1.32 como sendo VLAN 32 da interface trunk netif.eth1.

Quando a interface VLAN for inicializada, ela será nomeada eth1.32.

Nomes de VLAN Personalizados

No entanto, as vezes você pode querer desligar nomeação automática de VLAN baseada em arquivo e dar a sua interface VLAN um nome personalizado, tal como mgmt. Para fazer isso, você configuraria a interface trunk do mesmo jeito exato como descrito acima, mas ao invés de criar uma interface netif.eth1.32, você criaria uma interface netif.mgmt, e especificar vlan e trunk no arquivo config /etc/conf.d/netif.mgmt, como a seguir:

template="interface"
vlan="32"
trunk="eth1"
ipaddr="1.2.3.4/24"
gateway="1.2.3.1"
# etc...

Quando você especifica trunk e vlan no arquivo de configuração de interface, auto-detectador baseado em nome de trunk é desabilitado. Ambos trunk e vlan devem ser especificados -- você não pode especificar apenas um.

Então você simplesmente criaria um link simbólico para a interface de rede VLAN para netif.mgmt:

# cd /etc/init.d
# ln -s netif.tmpl netif.mgmt
# rc-update add netif.mgmt default

Quando a interface VLAN for inicializada, ela será nomeada mgmt.

Configuração Bonding

Bonding lhe permite agregar múltiplas interfaces de rede dentro de uma única interface de rede lógica, permitindo para benefícios em taxa de transferência tão bem quanto resiliência no caso que uma interface individual pode cair. Esse exemplo mostra como você criaria uma interface bonding (mybond) com uma simples configuração de ip estático, contendo dois dispositivos slave (eth0 e eth1).

Primeiro certifique-se de que seu kernel está configurado para suportar bonding (o nome do módulo é bonding) :

$ grep CONFIG_BONDING /usr/src/linux/.config
CONFIG_BONDING=m

Você vai querer certificar-se de que CONFIG_BONDING está configurado como "m" ou "y". Você pode encontrar essa opção de configuração do kernel em "Device Drivers" -> "Network Device Support" -> "Bonding driver support". Certifique-se de que ifenslave está instalada (emerged) (esse pacote incluso no Funtoo stage3):

# emerge ifenslave

Uma vez que o bonding está habilitado no kernel, você precisará escolher ao menos dois dispositivos para uni-los. Esses serão definidos como interface "slave" sem endereço IP.

# cd /etc/init.d/
# ln -s netif.tmpl netif.eth0
# ln -s netif.tmpl netif.eth1

Depois, configure as interfaces slave ao criar /etc/conf.d/netif.eth0 e /etc/conf.d/netif.eth1 com os seguintes conteúdos:

template="interface-noip"

Agora, criaremos uma interface bond e tornaremos netif.eth0 e netif.eth1 escravas dessa interface. Note que nossa interface bond pode ter qualquer nome. Para demonstrar isso, lhe daremos o nome de "mybond" abaixo:

# ln -s netif.tmpl netif.mybond
# rc-update add netif.mybond default

Agora podemos configurar "mybond" utilizando seu arquivo de configuração /etc/conf.d/netif.mybond, assim como faríamos uma interface regular, exceto que especificamos slaves:

template="bond"
ipaddr="10.0.1.200/24"
gateway="10.0.1.1"
nameservers="10.0.1.1 10.0.1.2"
domain="funtoo.org"
slaves="netif.eth0 netif.eth1"

Em uma configuração bond, é comum definir o MTU para o valor máximo possível suportado pelo hardware para to maximar a taxa de transferência. A fim de fazer isso, simplesmente defina a opção MTU em /etc/conf.d/netif.mybond para o valor máximo suportado pelo seu hardware. Os scripts de rede certificarão que essa configuração de MTU está aplicada a todas as interfaces slave:

mtu=9000

Configuração Bridge

Quando hospedar máquinas virtuais, pdoe ser conveniente utilizar uma configuração bridge. Esse exemplo lhe mostra como vocẽ criaria uma bridge (br0) como uma simples configuração de ip estático, contendo dois dispositivos slave (eth0, tap0).

Primeiro, certifiquei-se de que seu kernel está configurado para suportar bridging (o nome do módulo é bridge) :

$ grep CONFIG_BRIDGE /usr/src/linux/.config
CONFIG_BRIDGE=m
CONFIG_BRIDGE_IGMP_SNOOPING=y

Segundo passo, certifique-se de que você possui o software exigido instalado:

# emerge -av bridge-utils usermode-utilities

Depois, crie os links simbólicos necessários para as interfaces e adicione-as ao seu runlevel padrão :

# cd /etc/init.d/
# ln -s netif.tmpl netif.eth0
# ln -s netif.tmpl netif.br0
# ln -s netif.tmpl netif.tap0
# rc-update add netif.br0 default
# rc-update add netif.tap0 default

Depois, configure a interface slave /etc/conf.d/netif.eth0 :

template="interface-noip"

Depois, configure a interface slave /etc/conf.d/netif.tap0 - note que você necessitará somente group OU user, não ambos :

template="tap"
group="kvm" 
user="kvm"
mac_addr="10:20:30:40:50:66"

... e a interface bridge /etc/conf.d/netif.br0 :

template="bridge"
ipaddr="10.0.1.200/24"
gateway="10.0.1.1"
nameservers="10.0.1.1 10.0.1.2"
domain="funtoo.org"
slaves="netif.eth0 netif.tap0"
stp="on"
forwarding=1

Se você estiver utilizando dhcpcd, você deve certificar-se de que ele tente configurar eth0 ou br0 ao adicionar o seguinte ao /etc/dhcpcd.conf :

# don't attempt to pull an ip address for br0 or its slave device
denyinterfaces eth0 br0

Configuração de Rede Mais Complexa

Se os templates padrões não funcionarem para as suas necessidades, simplesmente crie um novo template -- recomendo iniciar a partir do template interface para muitas das coisas:

# cd /etc/netif.d
# cp interface custom

Você pode agora chamar quaisquer comandos que você precisar em /etc/netif.d/custom. As seguintes funções shell podem ser definidas em um script de rede:

netif_create

Em netif_create, você deve chamar quaisquer comandos para criar a interface se ela ainda não existe.

netif_depend

Em netif_depend, você pode definir dependências, utilizando as funções need e use.

netif_pre_up

Em netif_pre_up, você pode definir as ações de configuração de rede ao executar antes da interface estabelecer comunicação. Você pode também certificar-se de que certas variáveis estão especificadas ao chamar require var1 [var2...] aqui.

netif_post_up

Em netif_post_up, você pode definir as ações de configuração de rede para serem desempenhadas após a interface estabelecer comunicação.

netif_pre_down

Em netif_pre_down, você pode definir as ações de configuração de rede para serem desempenhadas antes que a interface encere a conexão.

netif_post_down

Em netif_post_down, você pode definir as ações de configuração de rede para que sejam desempenhadas depois de encerrar a interface.

netif_destroy

Em netif_destroy, você pode invocar quaisquer comandos necessários para destruir/excluir a interface se ela for dinâmica (tun/tap, etc.)

Como Funciona

Você não especifica uma função para na verdade estabelecer a conexão pela interface, porque o sistema baseado em template faz isso por você. O sistema baseado em template também executa todas as ações exigidas para encerrar a conexão da interface, então você somente precisa especificar ações atípicas que devem ser executadas - tal como remover interfaces child ou destruir uma bridge utilizando brctl.

Quando você criar seu próprio template de configuração de rede (network configuration template), as compatibilidades a seguir ficam disponíveis para uso automaticamente, desde que as variáveis apropriadas sejam definias no arquivo /etc/conf.d/netif.<ifname>, sem necessitar de quaisquer passos da sua parte:

  • Configuração de DNS utilizando domain e nameservers config settings. OpenResolv é utilizando automaticamente.
  • Configuração VLAN utilizando auto-naming (netif.ethX.Y) ou via nomeação personalizada com trunk e vlan config settings.
  • Gateway IPv4 padrão e configuração de rota utilizando as configurações gateway e route.
  • Gateway IPv6 padrão e configuração de rota utilizando as configurações gateway6 e route6.
  • Configuração MTU utilizando mtu setting.
  • Auto-depend (e configuração de auto-MTU) de especificadas interfaces slave utilizando as configurações slaves.
  • Renomear interfaces de rede existentes (especificar endereço MAC utilizando as configurações macaddr).

Para tirar vantagem dessa funcionalidade, simplesmente habilite as variáveis apropriadas.

Todas as outras configurações de rede necessárias e comportamento de dependência devem ser definidas utilizando as funções netif_-prefix descritas acima.

Wireless Configuration

The recommended approach for setting up Wi-Fi under Funtoo Linux is to use NetworkManager. Steps are provided in the Wi-Fi section of the Funtoo Linux Installation Guide.

Other Network Configurations

If you have a network configuration template that might be useful to others, please post it to the funtoo-dev mailing list so we can review it and possibly incorporate it into Funtoo.

License

Funtoo Linux networking scripts are released under the following license:


BSD 2-Clause Funtoo License

This work is free software. Source code is available.

Copyright 2009-2011 Funtoo Technologies. You can redistribute and/or modify it under the terms of the 2-clause BSD license. Alternatively you may (at your option) use any other license that has been publicly approved for use with this program by Funtoo Technologies (or its successors, if any.)