응답이 돌아올 경로 마련하기

LinuxBeginner
지금 연습하기

소개

Lantern Festival에는 Main Stage에서 Workshop으로 가는 순방향 경로가 준비되어 있지만 응답이 돌아오지 못합니다. 실제 연결 패킷을 관찰하고 기존 서비스를 유지하면서 누락된 반환 경로를 고칩니다.

먼저 “다른 축제 구역에 접속하기”를 완료하거나 해당 실습의 목적지 조회와 한정된 경로 추가·교체·복구 절차를 익혀 두세요. IPv4 주소, 간단한 /24 범위, 클라이언트/서버 역할과 포트를 구분하고, 터미널 명령을 입력하며 ip addr로 주소를 볼 수 있어야 합니다. 준비된 Linux 노드들은 커널을 공유하는 네트워크 네임스페이스이며 독립된 물리 머신이 아닙니다. 프로그래밍, 방화벽, 동적 라우팅, 서브넷 계산은 필요하지 않습니다.

실제 프로그램 요청은 Area Plan, 각 클라이언트 작업은 Area A와 Area B, 경로 변경은 West Router와 East Router에서 수행하세요. 각 터미널은 자체 디렉터리와 네트워크 상태를 유지합니다. 탭을 열어도 진행 상황이 초기화되지 않습니다. 이 실습은 독립적으로 시작합니다. 소요 시간은 읽기와 일반적인 실수를 포함한 저자의 예상이며, 초보자를 대상으로 측정한 시간이 아닙니다.

반환 경로를 복구하고 축제 네트워크 유지하기

이 단계에서는 경로를 변경하기 전에 연결의 양방향을 관찰합니다. 이 독립 환경에는 West Router에서 Workshop으로 가는 경로가 이미 있습니다. Area Plan에서 Area A로 Main Stage를, Area B로 Workshop을 요청하세요. 각 로컬 프로그램은 정상입니다. Area A에서 Broadcast Room도 요청합니다. Area A에서 Workshop 요청은 여전히 실패합니다.

TCP(전송 제어 프로토콜)는 이 HTTP 교환 전에 연결을 설정합니다. 클라이언트는 임시로 사용할 출발지 포트(에페메럴 포트)를 선택하며, 응답은 출발지와 목적지 주소 및 포트를 뒤집습니다. TCP 연결은 클라이언트 SYN으로 시작하고 서버는 HTTP 전송 전에 SYN-ACK로 응답합니다. 서버 네트워크에서 SYN을 봤다고 HTTP 요청이 서비스에 도착했다는 뜻은 아닙니다. 두 라우터에서 범위를 제한한 실제 트래픽을 관찰합니다.

West Router로 전환하세요. tcpdump는 패킷을 관찰하고 -n은 숫자 주소를 유지하며 -i any는 이 노드의 인터페이스를 관찰하고 -c 8은 일치하는 패킷 최대 여덟 개 후 종료합니다. 따옴표 안의 필터는 TCP 포트 8080을 고릅니다. 여덟 개가 오지 않아도 timeout 120은 2분 후 종료합니다. 이는 수집을 제한할 뿐 트래픽을 만들지 않습니다. 패킷 행은 수집이 끝나야 나타날 수도 있습니다. 탭을 바꾸기 전에 시작 메시지를 기다리고 중지 후 수집된 행을 읽으세요.

timeout 120 tcpdump -ni any -c 8 'tcp port 8080'

listening on any를 기다린 뒤 East Router로 전환해 같은 제한된 관찰을 시작합니다.

timeout 120 tcpdump -ni any -c 8 'tcp port 8080'

listening on any 후 Area A로 전환해 한 번 요청합니다. 3초 시간 초과가 예상됩니다.

curl --noproxy '*' -fsS --max-time 3 http://10.72.0.10:8080/programme.txt
echo $?

28을 확인하세요. 실패한 뒤 East Router로 전환합니다. 관찰자가 아직 실행 중이면 Ctrl+C로 중지하고 버퍼에 쌓인 행을 출력합니다. 이미 프롬프트로 돌아왔다면 그대로 둡니다. 어느 경우든 다른 명령 전에 즉시 상태를 출력하세요.

echo $?

124는 의도한 2분 제한이 수집을 끝냈다는 뜻입니다. 0은 tcpdump가 패킷 개수에 도달했거나 Ctrl+C를 정상 처리했을 수 있으며, 중단된 래퍼 프로그램은 130을 보고할 수도 있습니다. 관찰자의 상태만이 아니라 패킷 행을 증거로 읽으세요. 요청 전에 창이 끝났거나 아무것도 캡처되지 않았다면 두 제한 캡처와 요청을 반복합니다. 2분은 탭 전환 여유이며 초보자 측정으로 보장된 시간은 아닙니다.

출발지 10.71.0.10에서 10.72.0.10.8080으로 가는 Flags [S]를 찾으세요. transit으로 들어와 lan으로 나갑니다. 응답은 주소를 반대로 하여 10.72.0.10.8080에서 10.71.0.10으로 가는 Flags [S.]가 lan으로 들어옵니다. 그 다음으로 전달할 정상 경로가 없습니다. West Router로 전환해 관찰자가 실행 중이면 Ctrl+C로 중지한 뒤 그 상태도 읽습니다.

echo $?

West에는 Workshop으로 나가는 SYN이 보이지만 돌아오는 SYN-ACK는 보이지 않습니다. 정확한 시간, 임시 클라이언트 포트, 재전송 횟수는 달라집니다. 증거는 문제를 반환 경로로 좁히며 완료된 HTTP 교환을 캡처한 것은 아닙니다.

반환 경로 추가하기

여기서는 응답 목적지에 경로를 제공합니다. East Router에서 표를 읽고 원래 클라이언트 주소를 조회하세요.

ip route
ip route get 10.71.0.10

RTNETLINK answers: No route to host가 예상됩니다. East Router는 10.72.0.0/24와 전송망 172.22.0.0/24에 연결되어 있지만 응답 목적지는 10.71.0.0/24입니다. 다음 홉은 원격 클라이언트 자신이 아니라 인접한 West Router인 172.22.0.1이어야 합니다.

이전 실습에서 배운 같은 한정 경로 구문을 사용하세요.

ip route add 10.71.0.0/24 via 172.22.0.1 dev transit
ip route get 10.71.0.10

via 172.22.0.1 dev transit를 확인합니다. Area A로 전환해 업무 요청을 반복합니다.

curl --noproxy '*' -fsS --max-time 3 http://10.72.0.10:8080/programme.txt

Workshop의 완전한 프로그램과 Request received from: 10.71.0.10을 읽으세요. 이제 성공에는 연결 핸드셰이크, HTTP 요청과 HTTP 응답이 포함됩니다. 출발지는 Area A 주소 그대로입니다. 주소 변환이나 프록시는 반환 경로를 고치는 대신 누락된 경로를 숨깁니다.

경로가 이미 있다면 표를 읽고 ip route replace 10.71.0.0/24 via 172.22.0.1 dev transit를 사용합니다. 계속 실패하면 양쪽 라우터의 목적지와 다음 홉을 비교한 뒤 올바른 클라이언트 탭에서 다시 요청하세요. 모든 서비스를 재시작하거나 끝점 주소를 바꾸지 마세요.

다른 경로 유지하기

여기서는 양방향과 보호된 세 번째 네트워크를 검사합니다. Area B에서 Main Stage를 요청하세요.

curl --noproxy '*' -fsS --max-time 3 http://10.71.0.10:8080/programme.txt

개막 공연, 등불 행렬과 Request received from: 10.72.0.10을 확인합니다. 로컬 프로그램과 방송 큐도 요청하세요.

curl --noproxy '*' -fsS --max-time 3 http://10.72.0.10:8080/programme.txt
curl --noproxy '*' -fsS --max-time 3 http://10.73.0.10:8080/programme.txt

Area A로 전환해 원래 로컬 및 방송실 접근을 유지합니다.

ip -4 addr show dev eth0
ip route show default
curl --noproxy '*' -fsS --max-time 3 http://10.71.0.10:8080/programme.txt
curl --noproxy '*' -fsS --max-time 3 http://10.73.0.10:8080/programme.txt

주소는 계속 10.71.0.10/24이고 클라이언트 기본 경로는 via 10.71.0.1입니다. Area B로 전환해 대응하는 값을 읽으세요.

ip -4 addr show dev eth0
ip route show default

주소는 10.72.0.10/24, 기본 경로는 via 10.72.0.1 그대로입니다. Area Plan에서 Area A와 Area B 각각으로 세 리소스를 요청합니다. 내용과 원래 출발지 정보를 읽고 양쪽 라우터 표를 펼치세요. 원래의 두 unreachable default metric 32760 경로가 남아 있습니다. 한정된 목적지 경로가 기본 경로를 교체하지 않고 우선 적용됩니다.

East Router에서 보호된 세 번째 네트워크 경로를 실수로 삭제했다면 배운 교체 형식으로 그 항목만 복구하세요.

ip route replace 10.73.0.0/24 via 172.22.0.1 dev transit

끝점의 원래 기본 경로는 위에 있습니다. 라우터의 원래 기본 경로는 해당 탭에서 ip route replace unreachable default metric 32760로 복구할 수 있습니다. 이 강좌 명령을 플랫폼 네트워크에 실행하지 마세요. 수정 후 표를 읽고 영향받은 모든 요청을 다시 시도합니다. 원래 직접 연결 경로, 주소, 링크와 서비스 프로세스를 유지하세요. 검사는 읽기 전용 관찰과 일반 GET만 수행하며 경로를 추가하거나 환경을 고치지 않습니다. 명시한 원격 구역 범위 안의 동등한 정확한 경로도 허용됩니다.

복구 후 두 실제 경로 표를 펼친 Area Plan

지도에서 두 전송 구간 이웃을 찾고 목적지 행과 보존된 기본 경로를 비교하세요. 펼친 표는 작동 중인 실습의 실제 커널 경로를 보여 줍니다.

요약

실제 목적지 조회와 한정된 경로로 축제 프로그램을 전달하면서 원래 주소와 다른 경로를 유지했습니다. 제한된 실시간 캡처로 연결 요청과 응답도 구분했습니다.