기본 소스 IP 주소를 기본 경로에 대한 주소가 아닌 다른 주소로 변경하는 방법은 무엇입니까?

기본 소스 IP 주소를 기본 경로에 대한 주소가 아닌 다른 주소로 변경하는 방법은 무엇입니까?

배경 정보

  • 저는 Linux 시스템을 사용하여 공용 IPv4 주소의 작은 블록에 대한 트래픽을 라우팅하고 있습니다( 에서 IP 전달을 활성화하여 sysctrl.conf).

  • 라우터가 PPPoE를 사용하여 ISP에 연결 중입니다 eth1.

  • ppp에 사용되는 로컬 피어 주소는 ISP에서 지정한 수동으로 구성된 IP 주소입니다. 로컬 피어 주소는 입니다 10.0.0.10.

  • ppp에 사용되는 원격 피어 주소도 ISP에서 지정한 수동으로 구성된 IP 주소입니다. 원격 피어 주소는 입니다 10.0.0.9.

  • 라우터의 기본 경로는 을(를) 10.0.0.9경유하는 것 입니다 10.0.0.10.

  • 라우터는 를 통해 이더넷 스위치에 연결됩니다 eth0. eth0공개 주소 중 하나를 사용하도록 구성되었습니다.

  • 스위치는 다른 모든 공개 호스트를 연결합니다. 연결된 각 호스트는 공용 IP 주소를 사용합니다.

  10.0.0.9
ISP ----------+
              |   10.0.0.10                       X.X.X.X
              +------------- (eth1) ROUTER (eth0) --------------- SWTICH 
                                                                     |     
                                                                     +-- X.X.X.Y
                                                                     +-- X.X.X.Z
                                                                     ...

내 문제

라우터에서 실행되는 프로그램을 제외하고 모든 것이 예상대로 작동합니다. 라우터에서 실행하는 모든 애플리케이션은 10.0.0.10인터넷 연결을 시작할 때 소스 IP 주소로 사용됩니다. eth1인터넷이 가능한 곳이기 때문에 이는 이해할 수 있습니다 . 그러나 해당 주소는 공개적으로 라우팅할 수 없기 때문에 , aptping기타 프로그램이 작동하지 않습니다. 이를 지원하는 애플리케이션(예: )에 소스 주소를 명시적으로 설정하면 ping애플리케이션이 작동합니다.

내 질문

새 연결을 시작할 때 공용 IP 주소를 기본 소스로 사용하면서 eth1/를 통해 알 수 없는 패킷을 라우팅하도록 라우터를 구성하려면 어떻게 해야 합니까 ?10.0.0.9eth0

답변1

참고: 라우터의 LAN은 192.0.2.0/24이고 LAN IP는 192.0.2.0/24입니다.eth0구체적인 설명과 해결책을 제시할 수 있도록 192.0.2.1/24입니다.

ISP는 일부 공용 IP 주소를 확보하기 위해 내부 라우팅 목적으로 개인 IP를 할당했습니다. 이 IP는 결코 외부에서 볼 수 없기 때문에 괜찮습니다.엄격한 역방향 경로 전달ISP 라우터 너머로 유선을 연결하는 경우 경로를 따라 이동하거나 그렇지 않은 경우 라우팅이 불가능하므로 응답을 받을 수 없습니다). 그러나 이렇게 하면 라우터에서 ISP에 연결하는 것을 제외한 모든 경우에 이 IP를 사용하지 않도록 구성이 더 복잡해집니다.

아마도 다음과 비슷한 것이 있을 것입니다(약간 다를 수도 있지만 중요하지 않습니다).

# ip route
default via 10.0.0.9 dev ppp0 
10.0.0.9 dev ppp0 proto kernel scope link src 10.0.0.10 
192.0.2.0/24 dev eth0 proto kernel scope link src 192.0.2.1 

예를 들어 , 레이어 2 링크가 아닌 레이어 3 링크이기 때문에 필요하지 않거나 여전히 허용되기 때문에 표시되지 않거나 표시되지 않을 default via 10.0.0.9 dev ppp0 src 10.0.0.10수도 있습니다 . 아래 설정을 적절하게 조정하세요.via 10.0.0.9via

현재 커널은 인터넷에 연결하기 위해 같은 쪽에 설정된 가장 적합한 IP를 선택합니다. 왜냐하면 달리 알려주는 것이 없기 때문입니다(또는 원하지 않는 IP를 사용하도록 명시적으로 지시합니다).

# ip route get 8.8.8.8
8.8.8.8 via 10.0.0.9 dev ppp0 src 10.0.0.10 uid 0 
    cache 

커널이 인터넷에 연결하는 방법을 확인하고 특정 기본 소스 IP 주소를 명시할 때 라우팅 동작을 바꾸면 됩니다. 오류나 예상치 못한 문제가 발생할 경우 연결이 끊어질 수 있다는 점에 유의하세요. 가능하다면 대체(콘솔) 액세스 권한을 갖습니다.

# ip route replace default via 10.0.0.9 dev ppp0 src 192.0.2.1
# ip route get 8.8.8.8
8.8.8.8 via 10.0.0.9 dev ppp0 src 192.0.2.1 uid 0 
    cache 

그게 전부입니다. 라우터는 평소대로 라우팅하지만 로컬에서 시작되는 나가는 IP를 선택해야 하는 경우 명시적으로 달리 지시하지 않는 한(예: 소켓의 소스 IP를 명시적으로 바인딩하는 프로세스) 192.0.2.1을 선택합니다.

이 경로는 링크가 내려갔다 올라갈 때마다 다시 설정되어야 합니다. 링크가 완전히 설정된 후 일부 pppoe 스크립트에 이를 통합하는 것은 사용자의 몫입니다.

인터페이스 이름도 참고하세요.ppp0로 바뀔 수도 있다ppp1아니면 다른 이름. 설정 스크립트에서 이 문제를 처리하는 것은 사용자의 몫입니다.


동일한 경로 설정을 지정하는 대체 방법:

  1. 메트릭이 처음 설정될 때 더 낮은 메트릭을 추가합니다.

    원래 메트릭이 설정된 경우(즉, 0이 아니고 100이라고 가정) 이전 메트릭을 대체하는 대신 더 낮은 메트릭을 사용하여 대체 기본 경로를 추가할 수 있습니다.

    # ip route add default via 10.0.0.9 dev ppp0 src 192.0.2.1 metric 50
    
  2. 전용 라우팅 규칙

    위의 경로를 제거할 수 있는 pppoe와 관련된 다양한 도구와의 상호 작용이 두려운 경우 대체 라우팅 테이블에 이 설정을 설치하고 중단을 방지하기 위해 기본 테이블의 부분 복사본을 사용하여 라우팅 규칙에 우선 순위를 부여할 수 있습니다. 경로가 여전히 사라지기 때문에 연결을 끊거나 다시 연결할 때마다 이 작업을 다시 수행해야 합니다. 다음은 iif lo특별하며 실제로 들어오는 패킷이 아닌 "로컬에서 시작된 나가는 패킷"을 의미하며 109는 임의로 선택한 테이블 값입니다.

    # ip rule add iif lo lookup 109 # needed only once
    # ip route add table 109 10.0.0.9 dev ppp0 proto kernel scope link src 10.0.0.10 # to keep using 10.0.0.10 for local link, just in case
    # ip route add table 109 192.0.2.0/24 dev eth0 src 192.0.2.1 # will disappear if eth0 is brought down
    # ip route add table 109 default via 10.0.0.9 dev ppp0 src 192.0.2.1 # will disappear if ppp0 is brought down
    

    기본 테이블에 다른 라우팅 항목을 추가한 경우 해당 항목도 위에서 복사해야 할 가능성이 있습니다.

    # ip route get 8.8.8.8
    8.8.8.8 via 10.0.0.9 dev ppp0 table 109 src 192.0.2.1 uid 0 
        cache 
    
  3. 단순화된 경로를 사용한 라우팅 규칙

    기본 테이블에 경로를 유지하고 규칙의 접두사 기반 억제자를 사용하여 기본 경로만 재정의할 수 있습니다. 이렇게 하면 복사할 필요가 없습니다.모두경로: 기본 경로를 복사하고 변경할 수 있습니다.

    2.를 다음과 같이 바꾸십시오(기본 설정 값을 명시하고, 명시하지 않은 것처럼 내림차순으로 배치).

    # ip rule add pref 32765 iif lo lookup 109 # needed only once
    # ip rule add pref 32764 iif lo lookup main suppress_prefixlength 0 # needed only once
    
    # ip rule
    0:      from all lookup local
    32764:  from all iif lo lookup main suppress_prefixlength 0
    32765:  from all iif lo lookup 109
    32766:  from all lookup main
    32767:  from all lookup default
    
    # ip route add table 109 default via 10.0.0.9 dev ppp0 src 192.0.2.1 # will disappear if ppp0 is brought down
    

    기본 라우팅 테이블은 기본 경로가 아닌 항목에 대해 먼저 사용되며, 로컬에서 시작된 나가는 트래픽의 경우 기본 경로는 라우팅 테이블 109에 제공됩니다. 다른 모든 작업은 계속 진행되며 다음과 같이 기본 경로에 대해 기본 테이블을 다시 조회합니다. 보통의.

    2에 비해 장점은 테이블에서 (기본값이 아닌) 경로를 복제할 필요가 없다는 것입니다.기본더 이상 테이블 109에 들어갑니다. 아래 표기본2. 방법과 반대로 기본이 아닌 경로에 대한 결과를 제공합니다.

    # ip route get 8.8.8.8
    8.8.8.8 via 10.0.0.9 dev ppp0 table 109 src 192.0.2.1 uid 0 
        cache 
    # ip route get 192.0.2.2
    192.0.2.2 dev eth0 src 192.0.2.1 uid 0 
        cache 
    

답변2

당신이 말했듯이. 라우터를 게이트웨이로 사용하는 스위치의 다른 클라이언트에는 공용 IP 주소가 있습니다. 귀하의 라우터는 그렇지 않습니다. 라우팅되지 않는 LAN 주소가 있습니다. 귀하의 인터넷 서비스 제공업체가 귀하에게 공개 주소를 제공하지 않았기 때문에 라우터는 나갈 수 없습니다.

다른 공용 IP가 있는 경우 eth1에 가상 eth 구성을 생성하고 올바르게 라우팅하세요. 그러면 라우터도 나갈 수 있습니다.

관련 정보