Gostaria de encaminhar o tráfego gerado localmente:
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.