코로케이션에 있는 장비 구성을 바꾸는 일을 맡았다. 인계받은 망 구성도가 있었는데 언제 그린 것인지 적혀 있지 않았다.
Table of contents
Open Table of contents
목표와 되돌릴 근거
바꾸는 것 자체보다 바꾼 뒤에 문제가 나면 원인을 가릴 수 있는 상태를 만드는 것이 이 작업의 목표였다. 그러려면 바꾸기 전 상태가 실측 기록으로 남아 있어야 했다.
구성도만 믿고 바꿨다가 문제가 나면 원래 어떤 상태였는지조차 알 수 없게 되므로, 되돌릴 근거를 먼저 만드는 것이 이 작업의 앞 순서였다.
제약 — 서비스를 멈출 수 없다
서비스를 멈출 수 없어 작업 창구가 새벽 두 시간뿐이었고, 그 안에 못 끝내면 되돌려야 했다.
장비에 직접 붙는 것도 제한이 있어서, 원격으로 확인되는 것과 사람이 현장에 가야 보이는 것이 갈렸다.
실측 — 도면과 현물의 대조
문서를 찾으니 2년 전 것이 하나 있었는데 지금과 달랐다.
문서에 있는 것 서버 4대, 스위치 1대
실제 서버 9대, 스위치 2대, VPN 1대
ip addr 로 세어 보니 서버가 9대였는데 문서에는 4대만 있었다. 그 사이에 늘어난 것이 기록에 없었다.
각 장비에서 ip addr 로 주소를, ip route 로 경로를, ss -lntp 로 열린 포트를, /etc/resolv.conf 로 이름 서버를 모았다.
$ ip addr
$ ip route
$ ss -lntp
$ cat /etc/resolv.conf
그리고 서로 붙는지를 전수로 돌렸다.
$ for a in $HOSTS; do for b in $HOSTS; do
printf "%s->%s " "$a" "$b"
ssh "$a" "nc -z -w1 $b 22 && echo OK || echo X"
done; done
nc -z -w1 로 22 번 포트를 찔러 누가 누구에게 붙는지를 표로 만들었고 이것이 방화벽 규칙보다 정확했다. 규칙은 있는데 안 되는 경우가 있었다.
밖으로 나가는 것도 ss 로 봤다.
$ ss -tnp | awk '$5 !~ /^10\./ {print $5}' | sort -u
내부가 아닌 곳으로 붙어 있는 것이 여덟 군데였고 그중 셋은 무엇인지 아무도 몰랐다. 주소를 확인하니 옛날에 쓰던 외부 서비스였고 지금은 안 쓰는데 연결만 살아 있었다. 그리는 과정에서 안 쓰는 것이 드러난 셈이다.
그림과 표를 함께 남겼다
그림만 남기면 고칠 때 전부 다시 그려야 한다. 같은 내용을 표로도 남겨 값을 검색할 수 있게 했다.
Markdown 표에는 장비명과 포트와 대역과 용도와 ip addr 을 뜬 시각을 함께 넣어 두었다. 실측한 날짜를 함께 적어 이 기록이 언제 것인지 드러나게 했다.
적용 범위 — 이 기록이 유효한 곳
이 기록은 그 코로케이션 랙 세 개에만 해당하고, 다른 사이트는 구성이 달라 그대로 가져다 쓸 수 없다.
FortiGate 정책 표는 실제 트래픽 기준이라 신규 정책이 들어오면 처음부터 다시 뽑아야 한다. 그 조건을 표 머리에 적어 뒀다.
검증 — 전후 대조
작업이 끝난 뒤 같은 명령을 다시 돌려 전후를 비교했더니, 의도한 것 말고 달라진 항목이 둘 나왔다.
하나는 스위치 포트가 자동 협상으로 속도를 다르게 잡은 것이었고, 다른 하나는 FortiGate 세션이 예상보다 오래 남는 것이었다. 둘 다 전후 표가 없었으면 못 봤다.
옛 구성 기록은 지우지 않고 실측 날짜를 붙여 그대로 남겨 두었다. 새 구성이 안정될 때까지는 되돌릴 근거로 필요했다.
정리
- 바꾸기 전 상태를 실측으로 남기는 것이 되돌릴 근거가 된다
- 인계받은 구성도는 언제 그린 것인지 적혀 있지 않으면 믿을 수 없다
ip addr·ip route·ss -lntp출력으로 확인한다nc -z전수 대조가 방화벽 규칙보다 정확하다- 그림과 표를 함께 남기면 나중에 값을 검색할 수 있다
- 이 기록이 어느 사이트·어느 조건에 유효한지를 표 머리에 적는다
- 작업 후 같은 명령을 다시 돌려 전후를 대조한다
- 의도하지 않은 변화 둘은 전후 표가 없었으면 못 봤다