11.5. Configurando Placas de Interface de Rede
Anterior | Capítulo 11. Configuração e Ajuste | Próxima

## 11.5. Configurando Placas de Interface de Rede

Contribuído por Marc Fonvieille.

Adicionar e configurar uma placa de interface de rede (NIC) é uma tarefa comum para qualquer administrador do FreeBSD.

### 11.5.1. Localizando o Driver Correto

Primeiro, determine o modelo da NIC e o chip utilizado. O FreeBSD suporta uma ampla variedade de NICs. Verifique a lista de compatibilidade de hardware para a release do FreeBSD para ver se a NIC é suportada.

Se a NIC é suportada, determine o nome do driver do FreeBSD para a NIC. Consulte `/usr/src/sys/conf/NOTES` e `/usr/src/sys/`arch`/conf/NOTES` para a lista de Drivers NIC com algumas informações sobre os chipsets suportados. Em caso de dúvida, leia a página de manual do driver, pois ele fornecerá mais informações sobre o hardware suportado e quaisquer limitações conhecidas do driver.

Os drivers para as NICs comuns já estão presentes no kernel `GENERIC`, o que significa que a NIC deve ser verificada durante a inicialização. As mensagens de inicialização do sistema podem ser visualizadas digitando `more /var/run/dmesg.boot` e usando a barra de espaço para percorrer o texto. Neste exemplo, duas NICs Ethernet que utilizam o driver dc(4) estão presentes no sistema:

    dc0: <82c169 PNIC 10/100BaseTX> port 0xa000-0xa0ff mem 0xd3800000-0xd38
    000ff irq 15 at device 11.0 on pci0
    miibus0: <MII bus> on dc0
    bmtphy0: <BCM5201 10/100baseTX PHY> PHY 1 on miibus0
    bmtphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
    dc0: Ethernet address: 00:a0:cc:da:da:da
    dc0: [ITHREAD]
    dc1: <82c169 PNIC 10/100BaseTX> port 0x9800-0x98ff mem 0xd3000000-0xd30
    000ff irq 11 at device 12.0 on pci0
    miibus1: <MII bus> on dc1
    bmtphy1: <BCM5201 10/100baseTX PHY> PHY 1 on miibus1
    bmtphy1:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
    dc1: Ethernet address: 00:a0:cc:da:da:db
    dc1: [ITHREAD]

Se o driver da NIC não estiver presente em `GENERIC`, mas houver um driver disponível, o driver precisará ser carregado antes que a NIC possa ser configurada e usada. Isso pode ser feito de duas maneiras:

- A maneira mais fácil é carregar um módulo do kernel para a NIC usando o kldload(8). Para carregar automaticamente o driver no momento da inicialização, adicione a linha apropriada ao `/boot/loader.conf`. Nem todos os drivers NIC estão disponíveis como módulos.

- Como alternativa, compile estaticamente o suporte para a NIC em um kernel personalizado. Consulte `/usr/src/sys/conf/NOTES`, `/usr/src/sys/`arch`/conf/NOTES` e a página de manual do driver para determinar qual linha adicionar ao arquivo de configuração do kernel personalizado. Para mais informações sobre como recompilar o kernel, consulte Capítulo 8, Configurando o kernel do FreeBSD. Se a NIC foi detectada na inicialização, o kernel não precisa ser recompilado.

#### 11.5.1.1. Utilizando os Drivers Windows® NDIS

Infelizmente, ainda existem muitos fornecedores que não fornecem esquemas para seus drivers para a comunidade de código aberto porque consideram essas informações como segredos comerciais. Consequentemente, os desenvolvedores do FreeBSD e de outros sistemas operacionais são deixados com duas opções: desenvolver os drivers por um processo longo e complexo de engenharia reversa ou usar os binários de drivers existentes disponíveis para plataforma Microsoft® Windows®.

O FreeBSD fornece suporte “nativo” para a especificação de interface de driver de rede (NDIS). Ele inclui o ndisgen(8) que pode ser utilizado para converter um driver Windows® XP num formato que pode ser usado no FreeBSD. Como o driver ndis(4) usa um binário Windows® XP, ele só é executado em sistemas i386™ e amd64. Dispositivos PCI, CardBus, PCMCIA e USB são suportados.

Para usar o ndisgen(8), três coisas são necessárias:

1. Código-fonte do kernel do FreeBSD.

2. Um binário do driver do Windows® XP com uma extensão `.SYS`.

3. Um arquivo de configuração do driver do Windows® XP com uma extensão `.INF`.

Faça o download dos arquivos `.SYS` e `.INF` para a NIC específica. Geralmente, eles podem ser encontrados no CD do driver ou no site do fornecedor. Os exemplos a seguir usam o `W32DRIVER.SYS` e o `W32DRIVER.INF`.

A largura do bit do driver deve corresponder à versão do FreeBSD. Para FreeBSD/i386, use um driver de 32 bits Windows®. Para o FreeBSD/amd64, é necessário um driver de 64 bits do Windows®.

O próximo passo é compilar o binário do driver em um módulo do kernel carregável. Como `root`, use ndisgen(8):

    # ndisgen /path/to/W32DRIVER.INF /path/to/W32DRIVER.SYS

Este comando é interativo e solicita qualquer informação extra necessária. Um novo módulo do kernel será gerado no diretório atual. Use kldload(8) para carregar o novo módulo:

    # kldload ./W32DRIVER_SYS.ko

Além do módulo do kernel gerado, os módulos `ndis.ko` e `if_ndis.ko` devem ser carregados. Isso deve acontecer automaticamente quando qualquer módulo que dependa do ndis(4) for carregado. Caso contrário, carregue-os manualmente, usando os seguintes comandos:

    # kldload ndis
    # kldload if_ndis

O primeiro comando carrega o wrapper do driver da miniporta ndis(4) e o segundo carrega o driver NIC gerado.

Execute o comando dmesg(8) para ver se houve algum erro de carregamento. Se tudo correu bem, a saída deve ser semelhante à seguinte:

    ndis0: <Wireless-G PCI Adapter> mem 0xf4100000-0xf4101fff irq 3 at device 8.0 on pci1
    ndis0: NDIS API version: 5.0
    ndis0: Ethernet address: 0a:b1:2c:d3:4e:f5
    ndis0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
    ndis0: 11g rates: 6Mbps 9Mbps 12Mbps 18Mbps 36Mbps 48Mbps 54Mbps

A partir daqui, o `ndis0` pode ser configurado como qualquer outra NIC.

Para configurar o sistema para carregar os módulos ndis(4) no momento da inicialização, copie o módulo gerado, `W32DRIVER_SYS.ko`, para `/boot/modules`. Em seguida, adicione a seguinte linha ao `/boot/loader.conf`:

    W32DRIVER_SYS_load="YES"

### 11.5.2. Configurando a placa de rede

Quando o driver correto é carregado para a NIC, a placa precisa ser configurada. Ele pode ter sido configurado no momento da instalação por bsdinstall(8).

Para exibir a configuração da NIC, digite o seguinte comando:

    % ifconfig
    dc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
            options=80008<VLAN_MTU,LINKSTATE>
            ether 00:a0:cc:da:da:da
            inet 192.168.1.3 netmask 0xffffff00 broadcast 192.168.1.255
            media: Ethernet autoselect (100baseTX <full-duplex>)
            status: active
    dc1: flags=8802<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
            options=80008<VLAN_MTU,LINKSTATE>
            ether 00:a0:cc:da:da:db
            inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255
            media: Ethernet 10baseT/UTP
            status: no carrier
    lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
            options=3<RXCSUM,TXCSUM>
            inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4
            inet6 ::1 prefixlen 128
            inet 127.0.0.1 netmask 0xff000000
            nd6 options=3<PERFORMNUD,ACCEPT_RTADV>

Neste exemplo, os seguintes dispositivos foram exibidos:

- `dc0`: A primeira interface Ethernet.

- `dc1`: A segunda interface Ethernet.

- `lo0`: o dispositivo de loopback.

O FreeBSD usa o nome do driver seguido da ordem em que a placa é detectada na inicialização para nomear a NIC. Por exemplo, `sis2` é a terceira NIC no sistema usando driver sis(4).

Neste exemplo, o `dc0` está ativo e em execução. Os principais indicadores são:

1. `UP` significa que a placa está configurada e pronta.

2. A placa tem um endereço da Internet (`inet`), `192.168.1.3`.

3. Ela tem uma máscara de sub-rede válida (`netmask`), onde `0xffffff00` é o mesmo que `255.255.255.0` .

4. Tem um endereço de broadcast válido, `192.168.1.255`.

5. O endereço MAC da placa (`ether`) é `00:a0:cc:da:da:da`.

6. A seleção de mídia física está no modo de seleção automática (`media:Ethernet autoselect (100baseTX <full-duplex>)`). Neste exemplo, o `dc1` está configurado para ser executado com a mídia `10baseT/UTP`. Para obter mais informações sobre tipos de mídia disponíveis para um driver, consulte sua página de manual.

7. O status do link (`status`) é `active`, indicando que o sinal da portadora foi detectado. Para `dc1`, o status `status: no carrier` é normal quando um cabo Ethernet não está conectado à placa.

Se a saída ifconfig(8) tivesse mostrado algo semelhante a:

    dc0: flags=8843<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500
    	options=80008<VLAN_MTU,LINKSTATE>
    	ether 00:a0:cc:da:da:da
    	media: Ethernet autoselect (100baseTX <full-duplex>)
    	status: active

isso indicaria que a placa não foi configurada.

A placa deve ser configurada como `root`. A configuração da NIC pode ser realizada a partir da linha de comando com o ifconfig(8), mas não persistirá após uma reinicialização, a menos que a configuração também seja adicionada ao `/etc/rc.conf`. Se um servidor DHCP estiver presente na LAN, basta adicionar esta linha:

    ifconfig_dc0="DHCP"

Substitua `dc0` com o valor correto para o sistema.

A linha adicionada, então, segue as instruções dadas em Seção 11.5.3, “Teste e solução de problemas”.

### Nota:

Se a rede foi configurada durante a instalação, algumas entradas para a NIC podem já estar presentes. Verifique novamente o `/etc/rc.conf` antes de adicionar novas linhas.

No caso, não há nenhum servidor DHCP, a NIC deve ser configurada manualmente. Adicione uma linha para cada NIC presente no sistema, conforme mostrado neste exemplo:

    ifconfig_dc0="inet 192.168.1.3 netmask 255.255.255.0"
    ifconfig_dc1="inet 10.0.0.1 netmask 255.255.255.0 media 10baseT/UTP"

Substitua `dc0` e `dc1` e as informações de endereço IP com os valores corretos para o sistema. Consulte a man page do driver, ifconfig(8) e rc.conf(5) para maiores detalhes sobre as opções permitidas e a sintaxe de `/etc/rc.conf`.

Se a rede não estiver usando DNS, edite o `/etc/hosts` para adicionar os nomes e endereços IP dos hosts na LAN, se eles ainda não estiverem lá. Para maiores informações, consulte hosts(5) e `/usr/share/examples/etc/hosts`.

### Nota:

Se não houver um servidor DHCP e o acesso à Internet for necessário, configure manualmente o gateway padrão e o nameserver:

    # echo 'defaultrouter="your_default_router"' >> /etc/rc.conf
    # echo 'nameserver your_DNS_server' >> /etc/resolv.conf

### 11.5.3. Teste e solução de problemas

Uma vez que as alterações necessárias no `/etc/rc.conf` sejam salvas, uma reinicialização pode ser usada para testar a configuração de rede e verificar se o sistema é reiniciado sem nenhum erro. Como alternativa, aplique as configurações ao sistema de rede com este comando:

    # service netif restart

### Nota:

Se um gateway padrão foi configurado no `/etc/rc.conf`, também execute este comando:

    # service routing restart

Uma vez que o sistema de rede tiver sido reiniciado, teste as NIC.

#### 11.5.3.1. Testando uma placa Ethernet

Para verificar se uma placa Ethernet está configurada corretamente, execute um ping(8) na própria interface e, em seguida, ping(8) outra máquina na LAN:

    % ping -c5 192.168.1.3
    PING 192.168.1.3 (192.168.1.3): 56 data bytes
    64 bytes from 192.168.1.3: icmp_seq=0 ttl=64 time=0.082 ms
    64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=0.074 ms
    64 bytes from 192.168.1.3: icmp_seq=2 ttl=64 time=0.076 ms
    64 bytes from 192.168.1.3: icmp_seq=3 ttl=64 time=0.108 ms
    64 bytes from 192.168.1.3: icmp_seq=4 ttl=64 time=0.076 ms

    --- 192.168.1.3 ping statistics ---
    5 packets transmitted, 5 packets received, 0% packet loss
    round-trip min/avg/max/stddev = 0.074/0.083/0.108/0.013 ms

    % ping -c5 192.168.1.2
    PING 192.168.1.2 (192.168.1.2): 56 data bytes
    64 bytes from 192.168.1.2: icmp_seq=0 ttl=64 time=0.726 ms
    64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.766 ms
    64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.700 ms
    64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.747 ms
    64 bytes from 192.168.1.2: icmp_seq=4 ttl=64 time=0.704 ms

    --- 192.168.1.2 ping statistics ---
    5 packets transmitted, 5 packets received, 0% packet loss
    round-trip min/avg/max/stddev = 0.700/0.729/0.766/0.025 ms

Para testar a resolução da rede, use o nome do host em vez do endereço IP. Se não houver nenhum servidor DNS na rede, o `/etc/hosts` deve ser configurado primeiro. Para este propósito, edite o `/etc/hosts` para adicionar os nomes e os endereços IP dos hosts na LAN, se eles ainda não estiverem lá . Para maiores informações, consulte hosts(5) e `/usr/share/examples/etc/hosts`.

#### 11.5.3.2. Solução de problemas

Ao solucionar problemas de configurações de hardware e software, verifique primeiro as coisas simples. O cabo de rede está conectado? Os serviços de rede estão configurados corretamente? O firewall está configurado corretamente? A NIC é suportada pelo FreeBSD? Antes de enviar um relatório de bug, sempre verifique as Notas de Hardware, atualize a versão do FreeBSD para a versão mais recente do STABLE, verifique os arquivos da lista de discussão e pesquise na Internet.

Se a placa funcionar, mas o desempenho for ruim, leia tuning(7). Além disso, verifique a configuração da rede, pois configurações de rede incorretas podem causar conexões lentas.

Alguns usuários experimentam uma ou duas mensagens de device timeout, o que é normal para algumas placas. Se eles continuarem ou forem incômodos, verifique se o dispositivo está em conflito com outro. Verifique novamente as conexões dos cabos. Considere tentar outra placa.

Para resolver erros de watchdog timeout, primeiro verifique o cabo de rede. Muitas placas requerem um slot PCI que suporte a masterização de barramento. Em algumas placas-mãe antigas, apenas um slot PCI permite, normalmente o slot 0. Verifique a NIC e a documentação da placa-mãe para determinar se esse pode ser o problema.

As mensagens No route to host ocorrem se o sistema não puder rotear um pacote para o host de destino. Isso pode acontecer se nenhuma rota padrão for especificada ou se um cabo for desconectado. Verifique a saída do `netstat -rn` e certifique-se de que haja uma rota válida para o host. Se não houver, leia Seção 31.2, “Gateways e Rotas”.

As mensagens de erro ping: sendto: Permission denied são geralmente causadas por um firewall mal configurado. Se um firewall está habilitado no FreeBSD, mas nenhuma regra foi definida, a política padrão é negar todo o tráfego, mesmo o ping(8). Consulte Capítulo 30, Firewalls para maiores informações.

Às vezes, o desempenho da placa é ruim ou abaixo da média. Nesses casos, tente configurar o modo de seleção de mídia de `autoselect` para a seleção de mídia correta. Embora isso funcione para a maioria dos hardwares, isso pode ou não resolver o problema. Novamente, verifique todas as configurações de rede e consulte tuning(7).

Anterior | Acima | Próxima
11.4. Gerenciando Serviços no FreeBSD | Principal | 11.6. Hosts Virtuais

All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/

Questions that are not answered by the documentation may be sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.