Como ajustar o valor da MTU da interface de rede no Linux

O ajuste da MTU é um dos vários que podem ser feitos na sua rede. Este pode trazer ganhos significativos, em termos de eficiência de tráfego de dados, em uma rede estável.
A sigla MTU (Maximum Transmission Unit) corresponde a Unidade de Transmissão Máxima. Está relacionada a redes TCP/IP nos sistemas operacionais GNU Linux, BSD, UNIX etc.
network ethernet cable
A MTU se refere ao tamanho (em bytes) do maior datagrama (ou pacote) que uma determinada camada de um protocolo de comunicação pode passar por vez.
Usar pacotes de dados maiores, pode aumentar a eficiência do tráfego na interface. Em redes instáveis ou com problemas, isto pode não acontecer, contudo — uma vez que basta um bit estar com defeito para demandar que o pacote seja retransmitido.
Se você tiver interesse em saber mais sobre a MTU, pode encontrar informações neste artigo, no quadro de pesquisa do site ou nos links ao final do texto.
Você pode verificar o valor atual da MTU com o comando ifconfig, no Linux.
As instruções abaixo também podem ser aplicáveis ao seu smartphone Android, se você tiver um emulador de terminal instalado.
Veja alguns exemplos:

ifconfig

O resultado pode ser um pouco extenso, a depender da quantidade de interfaces de rede presentes no seu sistema:

docker0   Link encap:Ethernet  Endereço de HW 56:84:7a:fe:87:99  
          inet end.: 172.17.42.1  Bcast:0.0.0.0  Masc:255.255.0.0
          UP BROADCAST MULTICAST  MTU:1500  Métrica:1
          pacotes RX:0 erros:0 descartados:0 excesso:0 quadro:0
          Pacotes TX:0 erros:0 descartados:0 excesso:0 portadora:0
          colisões:0 txqueuelen:0 
          RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

eth0      Link encap:Ethernet  Endereço de HW 50:b7:c3:15:da:48  
          UP BROADCAST MULTICAST  MTU:1500  Métrica:1
          pacotes RX:0 erros:0 descartados:0 excesso:0 quadro:0
          Pacotes TX:0 erros:0 descartados:0 excesso:0 portadora:0
          colisões:0 txqueuelen:1000 
          RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

lo        Link encap:Loopback Local  
          inet end.: 127.0.0.1  Masc:255.0.0.0
          endereço inet6: ::1/128 Escopo:Máquina
          UP LOOPBACK RUNNING  MTU:65536  Métrica:1
          pacotes RX:3763 erros:0 descartados:0 excesso:0 quadro:0
          Pacotes TX:3763 erros:0 descartados:0 excesso:0 portadora:0
          colisões:0 txqueuelen:0 
          RX bytes:333273 (333.2 KB) TX bytes:333273 (333.2 KB)

wlan0     Link encap:Ethernet  Endereço de HW c4:85:08:a7:0b:aa  
          inet end.: 192.168.0.112  Bcast:192.168.0.255  Masc:255.255.255.0
          endereço inet6: fe80::c685:8ff:fea5:aaa/64 Escopo:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Métrica:1
          pacotes RX:298331 erros:0 descartados:0 excesso:0 quadro:0
          Pacotes TX:216836 erros:0 descartados:0 excesso:0 portadora:0
          colisões:0 txqueuelen:1000 
          RX bytes:425353002 (425.3 MB) TX bytes:21561532 (21.5 MB)

Se quiser, é possível combinar o ifconfig com o comando grep, para obter resultados mais objetivos.
Outra forma de obter informações sobre a MTU das suas interfaces de rede é a seguinte:

ip link list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
    link/ether 50:b7:c3:04:da:48 brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000
    link/ether c4:85:08:a5:0a:aa brd ff:ff:ff:ff:ff:ff
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default 
    link/ether 56:84:7a:fe:97:99 brd ff:ff:ff:ff:ff:ff
verificando configurações de rede no Android
Clique para ampliar.

O ifconfig é usado para configurar (e posteriormente manter) as interfaces de rede.
É usado durante o boot para configurar a maioria delas para um estado usável. Depois disto, é normalmente somente necessário durante depurações ou quando for necessária uma configuração fina do sistema.
(Manual do ifconfig)

Como alterar a MTU da interface de rede

Os comandos que seguem, necessitam ser executados com privilégios administrativos — uma vez que alteram as configurações de dispositivos importantes do seu sistema.
Só para deixar registrado, no Android, você precisa de um aparelho rooteado para poder fazer esta configuração.
Para alterar a MTU da interface eth0 para 1400, por exemplo, use o ifconfig da seguinte maneira:

sudo ifconfig eth0 mtu 1400

Para obter o mesmo resultado com o comando ip, proceda da seguinte forma:

sudo ip link set dev eth0 mtu 1400

Agora verifique se a alteração surtiu efeito com os comandos ifconfig ou ip link list.

Como alterar definitivamente a MTU da interface de rede

Para que as alterações sejam definitivas e permaneçam, mesmo que você desligue ou reinicie o sistema, é necessário editar alguns arquivos de configuração — que podem variar de acordo com o sistema operacional ou “sabor” do GNU/Linux em uso.
Nas distros baseadas no Debian (Ubuntu, Mint, Trisquel etc), edite o arquivo /etc/network/interfaces.
O exemplo, abaixo, mostra como configurar uma interface Ethernet. Adapte-o à sua realidade:

auto eth0
iface eth0 inet static
name Ethernet LAN card
address 192.168.0.2
netmask 255.255.255.0
broadcast 192.168.0.255
network 192.168.0.0
gateway 192.168.0.254
mtu 1400
post-up /etc/fw.start
post-down /etc/fw.stop

Feito isto, grave o arquivo e reinicie a interface de rede:

sudo /etc/init.d/networking restart

Nas distros baseadas no Red Hat (Fedora, CentOS etc), a configuração se dá no arquivo /etc/sysconfig/network-scripts/ifcfg-eth0:

DEVICE=eth0
BOOTPROTO=static
BROADCAST=192.168.1.255
HWADDR=00:0F:EA:91:04:07
IPADDR=192.168.1.111
NETMASK=255.255.255.0
NETWORK=192.168.1.0
MTU=1400
ONBOOT=yes
TYPE=Ethernet

Após gravar e fechar o arquivo, reinicie o serviço de rede:

sudo service network restart

ou (funciona no Debian também)

sudo service networking restart

Possíveis erros ao tentar configurar a interface de rede

A maioria dos erros pode ocorrer por que você não está executando algum comando com os privilégios administrativos que ele possivelmente requer.
Outros erros podem advir de se estar tentando aplicar um ajuste além das limitações do próprio hardware: SIOCSIFMTU: Invalid argument. Neste caso, tente usar outros valores (mais baixos) na configuração da MTU.
Se você tiver quiser ler mais sobre configuração de rede, no site, use a caixa de busca para encontrar outros artigos do seu interesse.

Referências

Exemplos de uso do comando ifconfig: https://elias.praciano.com/2015/05/como-configurar-sua-interface-de-rede-com-o-ifconfig/.
Wiki Debian: https://wiki.debian.org/NetworkConfiguration#A.2Fetc.2Fnetwork.2Finterfaces.

Como configurar sua interface de rede com o ifconfig

O comando ifconfig é usado para configurar interfaces de rede. No Linux, ele é muito usado tanto para obter informações sobre uma interface específica, como para alterar suas configurações.
network-switches-hot
O nome ifconfig quer dizer interface configurator.
O comando está presente no Android e, em aparelhos não rooteados, ele também pode ser usado, com algumas limitações.
Neste texto, vou mostrar, através de exemplos, alguns dos usos básicos do comando no Linux.
Embora o Android tenha sido mencionado e possua a ferramenta no seu leque de aplicativos de linha de comando, este tutorial se baseia em uma máquina Trisquel GNU/Linux Belenos — ou seja, você pode aplicar em qualquer distro Linux para PCs, sem problemas.

Como obter informações da configuração de uma interface de rede

Ao omitir opções ou parâmetro de execução, o ifconfig vai dar informações básicas sobre todas as interfaces de rede ativas no seu sistema:

ifconfig

A informação é disposta em 2 colunas. Na primeira, o nome da interface de rede (eth0, wlan0 etc) e, à direita, os dados referentes a ela:

eth0      Link encap:Ethernet  Endereço de HW 50:b7:c3:22:da:48  
          UP BROADCAST MULTICAST  MTU:1500  Métrica:1
          pacotes RX:0 erros:0 descartados:0 excesso:0 quadro:0
          Pacotes TX:0 erros:0 descartados:0 excesso:0 portadora:0
          colisões:0 txqueuelen:1000 
          RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

wlan0     Link encap:Ethernet  Endereço de HW c4:85:08:22:0a:aa  
          inet end.: 192.168.0.112  Bcast:192.168.0.255  Masc:255.255.255.0
          endereço inet6: fe80::c685:8ff:fea5:aaa/64 Escopo:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Métrica:1
          pacotes RX:1166677 erros:0 descartados:0 excesso:0 quadro:0
          Pacotes TX:763557 erros:0 descartados:0 excesso:0 portadora:0
          colisões:0 txqueuelen:1000 
          RX bytes:1664854788 (1.6 GB) TX bytes:74341794 (74.3 MB)

Para as informações sobre todas as interfaces de rede (ativas e inativas), use a opção -a:

ifconfig -a

Para obter informações específicas de uma determinada interface, basta citá-la na linha de comando:

ifconfig lo
lo        Link encap:Loopback Local  
          inet end.: 127.0.0.1  Masc:255.0.0.0
          endereço inet6: ::1/128 Escopo:Máquina
          UP LOOPBACK RUNNING  MTU:65536  Métrica:1
          pacotes RX:15175 erros:0 descartados:0 excesso:0 quadro:0
          Pacotes TX:15175 erros:0 descartados:0 excesso:0 portadora:0
          colisões:0 txqueuelen:0 
          RX bytes:1264323 (1.2 MB) TX bytes:1264323 (1.2 MB)

O “lo” se refere ao “loopback interface” — uma interface de rede especial que o sistema usa para se comunicar consigo mesmo.

Como desligar ou ligar uma interface de rede com o ifconfig

Para fazer algumas configurações numa interface de rede (alterar o endereço de hardware MAC, por exemplo), pode ser necessário desligar a interface do dispositivo.
Para isto, use a cláusula down:

sudo ifconfig eth0 down

Note que, para efetuar esta operação, é necessário ter privilégios administrativos no sistema (sudo).
Para ativar uma interface desabilitada, use a opção up:

sudo ifconfig eth0 up

Se quiser, use ifup ou ifdown para obter o mesmo efeito. Veja um exemplo:

sudo ifup eth0

Mais simples, não é?

Como atribuir um endereço IP a uma interface de rede com ifconfig

Para atribuir ou alterar o endereço de rede IPv4, basta informar o novo endereço IP após o nome da interface:

sudo ifconfig eth0 192.168.0.100

Para alterar a máscara da subrede use a opção netmask:

sudo ifconfig eth0 netmask 255.255.255.0

Você pode alterar vários itens de uma só vez:

sudo ifconfig eth0 192.168.2.2 netmask 255.255.255.0 broadcast 192.168.2.255
ifconfig eth0
eth0      Link encap:Ethernet  Endereço de HW 50:b7:c3:04:da:48  
          inet end.: 192.168.2.2  Bcast:192.168.2.255  Masc:255.255.255.0
          UP BROADCAST MULTICAST  MTU:1500  Métrica:1
          pacotes RX:0 erros:0 descartados:0 excesso:0 quadro:0
          Pacotes TX:0 erros:0 descartados:0 excesso:0 portadora:0
          colisões:0 txqueuelen:1000 
          RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

Se você quiser saber como alterar o endereço de hardware MAC, leia este artigo.

Como alterar o endereço IPv6 da placa de rede

O princípio é o mesmo usado anteriormente — só que você precisa especificar o tipo de endereço IPv6.
Veja um exemplo:

sudo ifconfig eth0 inet6 add 2001:0db8:0:f101::1/64 

Para remover o mesmo endereço IPv6, use a opção del:

ifconfig eth0 inet6 del 2001:0db8:0:f101::1/64

Como alterar a MTU da interface de rede

Uma taxa de MTU mais larga pode proporcionar mais eficiência — por que cada pacote que transita na rede poderá levar mais dados do usuário.
Aumentar o valor da MTU permite ao sistema processar menor quantidade de pacotes ao transmitir a mesma quantidade de dados.

A MTU corresponde a unidade de transmissão máxima — ou Maximum Transmission Unit — do protocolo de comunicação de uma camada. Seu tamanho é definido pela maior quantidade de bytes que a camada consegue repassar.

Em alguns sistemas, o processamento-por-pacote pode ser um limitador crítico da performance.
O ganho obtido com o aumento da taxa MTU traz consequências negativas.
Pacotes maiores ocupam links mais lentos por mais tempo do que pacotes menores — o que pode causar gargalos ou demoras para passar dados.
De forma resumida: aumento do lag e latência mínima.
Pacotes mais volumosos também são problemáticos na presença de erros de comunicação: uma pequena corrupção em um único bit, requer que todo o pacote seja retransmitido.
Se você quer alterar o valor do MTU, contudo, você provavelmente sabe o que está fazendo (não é?).
A interface de rede Ethernet tem um valor padrão de unidade de transmissão de 1500. Para alterar este valor para 1400, siga o exemplo abaixo:

ifconfig eth0 mtu 1400

Uma outra forma de ver o valor da MTU de cada interface é através do uso do comando ip:

ip link list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1400 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
    link/ether 50:b7:c3:04:da:48 brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000
    link/ether c4:85:08:a5:0a:aa brd ff:ff:ff:ff:ff:ff
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default 
    link/ether 56:84:7a:fe:97:99 brd ff:ff:ff:ff:ff:ff

Eventualmente, use o comando grep, para ver apenas as informações que te interessam.

Como ativar o modo promíscuo na sua interface de rede

O modo promíscuo ou promiscuous/promisc mode é comumente usado para diagnosticar problemas de conectividade em uma rede.
No Linux, você precisa ter privilégios administrativos para ativar este modo em uma interface de rede.
Quando este modo está ativado, você pode usar programas que fazem uso deste recurso para mostrar todos os dados em trânsito dentro da rede.

Alguns protocolos, como o FTP e o Telnet fazem transferência de dados em modo texto puro, sem encriptação e, portanto, podem ter seus dados expostos através de um programa scanner de rede — que faça uso do modo promíscuo para sondar o tráfego.

Para ativar o modo promíscuo da sua interface wifi wlan0, use o exemplo:

sudo ifconfig wlan0 promisc

Para voltar ao modo normal (não-promíscuo), use a opção -promisc:

sudo ifconfig wlan0 -promisc

Como adicionar interfaces alias de rede

O ifconfig pemite configurar interfaces de rede adicionais através do recurso alias.
Veja como adicionar uma interface de rede alias.
Se o endereço IP da sua interface eth0 é 192.168.0.125, então o alias tem que ser 192.168.0.127:

sudo ifconfig eth0:0 192.168.0.127

Agora verifique a nova interface:

ifconfig eth0:0
eth0:0    Link encap:Ethernet  HWaddr 00:01:6C:99:14:68
          inet addr:192.168.0.127  Bcast:192.168.0.63  Mask:255.255.255.240
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:17

Para desativar a interface alias, use a opção down:

ifconfig eth0:0 down

Referências

http://en.wikipedia.org/wiki/Maximum_transmission_unit
http://www.tldp.org/HOWTO/Linux+IPv6-HOWTO/x1050.html

Conexão IPv6 no Linux com Miredo

O Miredo torna fácil acessar redes e sites IPv6, mesmo que você esteja dentro de uma rede IPv4. Ele é fácil de instalar e fácil de usar.
O Miredo faz uso da tecnologia de transição Teredo, através da qual, uma máquina pode acessar redes externas IPv6, mesmo estando dentro de uma rede IPv4.
O protocolo Teredo consegue cumprir sua função mesmo que você esteja se conectando à Internet através de um simples roteador caseiro.

CURIOSIDADE

O Miredo é um programa de tunelamento que usa o protocolo Teredo, desenvolvido pelo programador francês Rémi Denis-Courmont.
O nome do programa é uma mistura das sílabas do primeiro nome do programador (mi-re) e a palavra “teredo”.
Saiba mais no site oficial.

Quais são as requisições de hardware para rodar o Miredo

Intel Pentium M 1.4 Ghz Banias Core
Clique para ampliar.
Segundo o site oficial, qualquer máquina atual é capaz de rodar o Miredo.
Testes de estresse mostraram que o programa consegue processar 1 Gigabit por segundo (1Gb/s) em uma máquina x86, com um processador de um núcleo, de 32 bits, a 1,5GHz — Ou seja, um Pentium M, de 10 anos atrás, dá conta do serviço.
Com 300 Mb de memória RAM, ele já consegue lidar com milhões de peers distintos.
O site oficial do aplicativo informa que ele roda bem em hardwares com poucos recursos, tal como um roteador wireless Linksys WRT54G, com um processador MIPS de 200 MHz.
Claro, você precisa ter suporte ao IPv6 incorporado ao código do seu Kernel — se você estiver usando uma distro Linux atual, este já é provavelmente o seu caso.

Instalação do Miredo

Antes de começar, se quiser, você pode rodar um teste de conexão IPv6:
http://test-ipv6.com/
Vou mostrar como instalar, compilando o código (isto serve para qualquer sistema operacional e qualquer distro Linux). Adicionalmente, vou mostrar como baixar e instalar no Debian e em outros distros derivadas dele (como o Ubuntu, Linux Mint, etc).

Baixar, compilar, instalar

Se você usa Ubuntu ou Debian e prefere instalar, usando o apt-get, pule para o próximo tópico.
Para compilar o código, comece por baixar o aplicativo, no endereço abaixo:

http://www.remlab.net/files/miredo/?C=N;O=D

em seguida, execute os seguintes comandos (tome o cuidado para alterar a versão do Miredo para aquela que você baixou):

unxz miredo-1.2.6.tar.xz
tar xvf miredo-1.2.6.tar
cd miredo-1.2.6/
./configure
make
su
make install

O processo cria um arquivo de configuração automaticamente em /usr/local/etc/miredo/miredo.conf — que faz com que o Miredo funcione como um cliente do Teredo, usando como servidor o teredo.remlab.net (que é o servidor de testes oficial Teredo do Miredo). Estas configurações funcionam bem para a maioria dos usuários.
Experimente rodar novamente o teste de conexão IPv6.

Como instalar o Miredo no Ubuntu ou no Debian

O Miredo faz parte dos repositórios oficiais do Debian e do Ubuntu. Portanto, sua instalação pode ser feita direto com o apt-get:

sudo apt-get update
sudo apt-get install miredo

Se o teste, que segue, funcionar, então tudo estará certo:

sleep 10
ping6 -c5 ariane.wifi.pps.univ-paris-diderot.fr

funcionamento e teste do miredo
Clique para ampliar.

Você pode experimentar novamente o site abaixo (e veja diferença no resultado):
http://test-ipv6.com/

Configurações adicionais no Miredo

O arquivo de configuração /etc/miredo.conf pode ser alterado para apontar pro servidor de tunneling mais próximo.
Os leitores de Portugal, podem se beneficiar mais ao usar um servidor mais próximo, em seu próprio continente, como sugerido nesta lista (Wikipedia).
Abra o arquivo (você vai precisar de privilégios administrativos) de configuração e altere o ServerAddress para um que esteja mais próximo.

Altere o serveraddress teredo miredo
Clique, para ampliar.

# Pick a Teredo server:
#ServerAddress  teredo.ipv6.microsoft.com
ServerAddress   teredo-debian.remlab.net

Quem se encontra no Brasil, pode deixar o arquivo do jeito que está.

Testando o IPv6

É claro que você quer testar as novas configurações do seu sistema.
Com o comando ifconfig, é possível ver um novo tap device, chamado teredo. Veja a saída parcial do comando, no meu terminal:

ifconfig
teredo    Link encap:Não Especificado  Endereço de HW 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          endereço inet6: 2001:0:53aa:64c:2c9e:1af7:4c38:4420/32 Escopo:Global
          endereço inet6: fe80::ffff:ffff:ffff/64 Escopo:Link

Você pode testar também acessando um site como o http://ipv6.google.com/
Enfim, divirta-se, com o IPv6!
Fontes: