Você está criando uma VLAN, o que significa (neste caso) que quaisquer pacotes emitidos do pacote eth0.22 são prefixados com um cabeçalho 802.1Q (uma tag) dizendo que o pacote é destinado à VLAN 22. O switch aceita este pacote em uma interface troncalizada e encaminha o pacote para fora de qualquer porta que esteja definida como permitindo a VLAN 22 (ou definida como permitindo qualquer VLAN).
Se a interface de saída for um switchport de acesso (ou seja, não um tronco), o cabeçalho do 802.1Q será removido e o pacote será encaminhado. Se a porta é um tronco, a tag 802.1Q é deixada no lugar.
Para que tudo isso funcione, você precisa de um switch gerenciado - um que entenda as VLANs. No seu caso, você não tem um, ou as portas que você está conectando não estão configuradas como troncos.
Com um switch não gerenciado, um pacote marcado não é compreendido e, portanto, é descartado.
O que está acontecendo no seu caso é quando você faz um ping, o seu SO irá escolher a interface apropriada - eth0.22 e então enviar o pacote com uma tag 802.1q.
O sistema operacional escolhe a interface apropriada com base na tabela de roteamento. Como 192.168.3.0
está explicitamente conectado à interface eth0.22, todos os pacotes para esta rede são enviados por esse nó por padrão. Veja a tabela de roteamento:
$ netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
[..snip..]
192.168.3.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0.22
Isso, então, cai no switch, pois não sabe como lidar com isso.
Quando você força o ping para fora da interface eth0, ele está saindo de uma interface não marcada e, assim, o switch entende o pacote e o encaminha. A máquina receptora a vê, e por um capricho da maneira como o ping funciona, responderá pela interface em que o ping chegou, em vez da interface eth0.22 mais apropriada.
Pode ser que, embora o ping funcione, outros serviços podem não funcionar.
Se você quiser usar VLANs, então você precisa de um switch com capacidade de VLAN, caso contrário, você pode usar o endereçamento secundário na interface eth0 se você não tiver um.
A razão pela qual isso funciona quando você está fazendo ping é que a marcação 802.1q não acontece até a saída. Portanto, se 192.168.3.1
estiver pingando 192.168.3.1
, ele não emitirá o pacote para a rede e, portanto, não o marcará.