Debian Stretch Webserver가 두 NIC 모두에서 응답하도록 합니다.

Debian Stretch Webserver가 두 NIC 모두에서 응답하도록 합니다.

나는 얻었다하나웹서버닉 두 개개별 서브넷에서192.168.188.x그리고192.168.198.x. 이 웹 서버는 2개의 다른 라우터(192.168.188.1 및 192.168.198.1)에 연결되어 있으며 포트 80을 통해 인터넷에 직접 포트 전달됩니다(각 라우터에는 자체 공용 IP 주소도 있습니다).

     (external ip)                Portforwarding:80                   (external ip)
    ---[ROUTER]----                                                  ---[ROUTER]----
     192.168.188.1               Router internal IP                   192.168.198.1        
           |                                                               |
           |                                                               |
           |                                                               |
           |                                                               |
           +------- 192.168.188.11:80 [WEBSERVER] 192.168.198.11:80 -------+

나는 포트 80의 서버에 반응하고 싶습니다.둘 다서브넷. 안타깝게도 기본 구성에서는 기본 게이트웨이로 설정된 라우터에만 응답합니다. 이는 매우 논리적입니다. 하지만 패킷을 보낸 인터페이스로 패킷을 다시 보내려면 이를 수행해야 합니다. 이것을 달성하는 방법은 무엇입니까? NAT 등을 위한 라우터의 포트 전달 외에는 추가 구성 가능성이 없습니다. 웹서버에서 어떤 작업도 수행해야 하는데, 이는 데비안 확장입니다.

네트워크 문제는 10년에 한 번 정도만 직면한다는 점을 염두에 두고 간단하게 설명해주세요. :)

답변1

웹 서버가 0.0.0.0:80을 수신하도록 올바르게 구성되어 확인할 수 ss -l있다면 문제는 웹 서버 구성 문제가 아니라 라우팅 문제입니다. 두 개의 경로가 있어도 한 번에 하나의 경로만 감지할 수 있습니다. 원하는 것을 달성하는 유일한 방법은 두 번째 기본 경로를 추가하고 소스 정책 라우팅을 사용하는 것입니다. 서버가 Linux라면 iptables를 통해 수행할 수 있습니다. 노력하다이것또는이것.

답변2

이 솔루션에는 복잡한 라우팅 구성이 필요합니다.

  1. 웹 서버는 ( 192.168.188.11192.168.198.11) 주소 또는 0.0.0.0주소를 모두 수신해야 합니다. 이는 을 의미합니다 all addresses. 명령어 로 확인해보세요 ss -tlnp sport == :80.

  2. 각각에 대해 별도의 라우팅 테이블을 만듭니다.다리:

ip route add 192.168.188.0/24 dev <iface1> table 1
ip route add 0/0 via 192.168.118.1 dev <iface1> table 1

ip route add 192.168.198.0/24 dev <iface2> table 2
ip route add 0/0 via 192.168.198.1 dev <iface2> table 2
  1. 요청이 수신된 내용을 통해 동일한 인터페이스를 통해 응답을 라우팅하도록 라우팅 규칙을 구성합니다.
ip rule add from 192.168.188.11 lookup 1 pref 1000
ip rule add from 192.168.198.11 lookup 2 pref 2000
  1. 문제 해결:
  • tcpdump -ni <iface> 'tcp port 80'트래픽을 스니핑하는 데 사용하십시오 . 최소한 외부에서 http 요청이 표시되어야 합니다.
  • 경로를 확인하세요요청와 함께 ip route get <dst> from <src> iif <iface>. 경로 가 표시되어야 합니다 local. 다른 내용이 표시되면 rp_filterwith ip netconf show dev <iface>명령을 확인하세요. off또는 모드에 있어야 합니다 loose.
  • 실제 경로를 확인하세요.답글with ip route get <dst> from <src-address>, 여기서 대상 주소는 소스 주소입니다.요청당신은 출력에서 ​​보았습니다 tcpdump.
  • 명령으로 방화벽 규칙을 확인하십시오 iptables-save -c. 구성요구하지 않습니다추가적인규칙!

관련 정보