fwmark 및 정책 라우팅을 사용할 때 나가는 TCP 연결에 대해 "도달할 수 없음" 응답이 없습니다.

fwmark 및 정책 라우팅을 사용할 때 나가는 TCP 연결에 대해 "도달할 수 없음" 응답이 없습니다.

로컬에서 생성된 트래픽을 라우팅하고 싶습니다.

  • 인터페이스 "A"를 통해 호스트 "H"의 TCP 포트 "A"로,
  • 인터페이스 "B"를 통해 호스트 "H"의 TCP 포트 "B"로.

인터페이스 "B"를 사용할 수 없는 경우가 있습니다. 그런 다음 사용자가 TCP 포트 "B"에 연결하려고 하면 커널이 "네트워크 연결 불가" 오류를 사용자에게 알리기를 원합니다.

다음 설정을 시도했습니다(인터페이스 "B"가 다운된 경우).

# 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

(단순화를 위해 이 규칙에는 아직 포트가 포함되지 않습니다.)

# 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

인터페이스 "B"를 사용할 수 있고 200 테이블에 일반 라우팅 규칙이 포함되어 있으면 이는 놀라운 일이 아닙니다.

그러나 인터페이스 "B"를 사용할 수 없는 경우에만 ICMP 및 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

TCP의 경우 중단됩니다.

$ nc -nv host-H-ip 5000

이 주제와 관련된 것으로 보이는 몇 가지 스레드를 찾았습니다.

불행하게도 TCP에 대해서도 "Network Unreachable"이 표시되지 않는 이유를 아직도 이해하지 못합니다. 누군가 나에게 이것을 설명해 줄 수 있습니까?

저는 3.16.7-ckt25-1 amd64 커널을 사용하고 있습니다.

폴리스티렌

나도 가지고 있어풀어 주다netdev 메일링 리스트로 이동하세요.

관련 정보