배경 정보
저는 Linux 시스템을 사용하여 소규모 공용 IPv4 주소 집합에 대한 트래픽을 라우팅하고 있습니다( 에서 IP 전달을 활성화하여
sysctrl.conf
).라우터는
eth1
PPPoE를 사용하여 ISP에 연결합니다.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
인터넷이 있기 때문에 이것은 이해할 수 있습니다 . 그러나 해당 주소는 공개적으로 라우팅할 수 없으므로 , apt
, ping
및 기타 프로그램을 실행할 수 없습니다. 이를 지원하는 애플리케이션에 소스 주소(예:)를 명시적으로 설정하면 ping
애플리케이션이 작동합니다.
내 질문
새 연결을 시작할 때 공용 IP 주소를 기본 소스로 사용하면서 알 eth1
수 없는 패킷을 전달/라우팅 하도록 라우터를 구성하려면 어떻게 해야 합니까 ?10.0.0.9
eth0
답변1
참고: 라우터의 LAN은 192.0.2.0/24이고 LAN IP는 192.0.2.0/24라고 가정합니다.이더넷 0192.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
예를 들어 계층 3 링크이고 계층 2 링크가 아니므로 필요하지 않기 때문에 default via 10.0.0.9 dev ppp0 src 10.0.0.10
이 있거나 표시되지 않을 수도 있습니다 (그러나 여전히 허용됨). 아래 설정을 적절하게 조정하면 됩니다.via 10.0.0.9
via
현재 커널은 인터넷에 액세스하기 위해 같은 쪽에 설정된 IP 중 명백히 가장 좋은 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를 선택할 때가 되면 명시적으로 지시하지 않는 한 192.0.2.1이 선택됩니다(예: 프로세스가 소스 IP를 소켓에 명시적으로 바인딩합니다).
이 경로는 링크가 다운되고 다시 백업될 때마다 재설정되어야 합니다. 링크가 완전히 설정되면 이를 일부 pppoe 스크립트에 통합할 수 있습니다.
또한 인터페이스 이름을 기록해 두십시오.포인트 투 포인트 0으로 변경될 수 있습니다.포인트 투 포인트 1아니면 다른 이름. 설정 스크립트에서 이를 처리하는 것은 사용자의 몫입니다.
동일한 경로 설정을 지정하는 다른 방법:
지표를 처음 설정할 때 하위 지표를 추가하세요.
원래 메트릭이 설정된 경우(즉, 0이 아니고 100이라고 가정) 이전 경로를 바꾸는 대신 더 낮은 메트릭을 사용하여 대체 기본 경로를 추가할 수 있습니다.
# ip route add default via 10.0.0.9 dev ppp0 src 192.0.2.1 metric 50
비공개 라우팅 규칙
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
라우팅을 단순화하는 라우팅 규칙
기본 테이블에 경로를 유지하고 규칙에서 접두사 기반 억제자를 사용하여 기본 경로를 재정의할 수 있습니다. 이렇게 하면 중복이 방지됩니다.모두경로: 기본 경로를 복사하고 변경하면 됩니다.
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 구성을 생성하고 올바르게 라우팅하세요. 그러면 라우터도 꺼질 수 있습니다.