Nenhuma resposta "inacessível" para uma conexão TCP de saída ao usar fwmark e roteamento de política

3

Gostaria de encaminhar o tráfego gerado localmente:

  • para uma porta TCP "A" do host "H" por meio da interface "A",
  • para uma porta TCP "B" do host "H" por meio da interface "B".

A interface "B" às vezes não está disponível. Então eu gostaria que o kernel notificar o usuário com erro "Rede inacessível" se alguém tentar conecte-se à porta TCP "B".

Eu tentei as seguintes configurações (quando a interface "B" está inativa):

# iptables -t mangle -nvL OUTPUT
Chain OUTPUT (policy ACCEPT 2 packets, 120 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    2   120 MARK       all  --  *      *       0.0.0.0/0            host-H-ip         MARK set 0x64

(por simplicidade, a regra ainda não inclui portas)

# ip rule
0:      from all lookup local 
32765:  from all fwmark 0x64 lookup 200 
32766:  from all lookup main 
32767:  from all lookup default
# ip route show table 200
prohibit default

Não há surpresas quando a interface "B" está disponível e as 200 tabela contém uma regra de roteamento regular.

Mas quando a interface "B" não está disponível, obtenho resultados satisfatórios apenas para ICMP e UDP:

$ ping host-H-ip
PING host-H-ip (host-H-ip) 56(84) bytes of data.
ping: sendmsg: Network is unreachable

$ nc -nuv host-H-ip 5000
(UNKNOWN) [host-H-ip] 5000 (?) open
foo
too many output retries : Network is unreachable

Para TCP, apenas trava:

$ nc -nv host-H-ip 5000

Encontrei alguns tópicos que parecem estar relacionados ao tópico:

Infelizmente, ainda não entendi porque não consigo "Rede é inacessível "para TCP também. Alguém poderia explicar isso para mim?

Estou usando um kernel 3.16.7-ckt25-1 amd64.

PS

Eu também postou na lista de discussão do netdev.

    
por wodny 14.05.2016 / 14:16

0 respostas