두 Linux 시스템 간에 간단한 IPsec을 구축했습니다.
SHAKEY=0xd3413c31c7d19c93d04db1c6ae8d73d9a64910c2e76297129acde44aaa9de5c5
AESKEY=0xcd191fac520878852e15647dce3456ba9857e2dfd6ed56421eb50cb58d7a1e5a
SPI=0x01
if [ "$(hostname -s)" = "host1" ] ;then
SRC=10.0.0.1
DST=10.0.0.3
fi
if [ "$(hostname -s)" = "host3" ] ;then
SRC=10.0.0.3
DST=10.0.0.1
fi
SDIR="src $SRC dst $DST"
DDIR="src $DST dst $SRC"
ip xfrm state add ${SDIR} proto esp spi ${SPI} reqid ${SPI} \
mode transport auth sha256 ${SHAKEY} enc aes ${AESKEY}
ip xfrm state add ${DDIR} proto esp spi ${SPI} reqid ${SPI} \
mode transport auth sha256 ${SHAKEY} enc aes ${AESKEY}
ip xfrm policy add ${SDIR} dir out priority 0 \
tmpl ${SDIR} proto esp reqid ${SPI} mode transport
ip xfrm policy add ${DDIR} dir in priority 0 \
tmpl ${DDIR} proto esp reqid ${SPI} mode transport
이것은 훌륭하게 작동합니다. 이제 패킷 흐름을 중단하지 않고 새로운 키 세트로 변경하고 싶습니다. 내가 예상하는 작동 방식은 수신 경로에 추가 키 세트를 추가하고, 전송 경로를 새 키 세트로 전환하고, 이전 키 세트를 삭제하는 것입니다.
이것이 올바른 접근 방식입니까? 실제로 어떻게 해야 합니까? 내가 시도한 것은 다음과 같습니다.
AESKEY2=0x2bdfbfbee5aab7be4f4ccfe202e6f1d5e363503140441fe8aba77c3b784e65bd
SHAKEY2=0xed2ac9c739894c73bae1a9fe477631add20398b0bbc906c5ec486f27ddbb84ac
SPI2=0x02
ip xfrm state add ${SDIR} proto esp spi ${SPI2} reqid ${SPI2} \
mode transport auth sha256 ${SHAKEY2} enc aes ${AESKEY2}
ip xfrm state add ${DDIR} proto esp spi ${SPI2} reqid ${SPI2} \
mode transport auth sha256 ${SHAKEY2} enc aes ${AESKEY2}
이는 패킷이 SPI 1에서 계속 흐르기 때문에 작동하는 것 같습니다.
ip xfrm policy add ${DDIR} dir in \
tmpl ${DDIR} proto esp reqid ${SPI2} mode transport
실패: RTNETLINK 답변: 파일이 존재합니다.
ip xfrm policy add ${SDIR} dir out priority 5\
tmpl ${SDIR} proto esp reqid ${SPI2} mode transport
ip xfrm policy add ${DDIR} dir in priority 5 \
tmpl ${DDIR} proto esp reqid ${SPI2} mode transport
새 정책을 추가하는 것은 허용되지만 우선순위가 0인 항목을 명시적으로 제거할 수 있는 방법은 없는 것 같습니다. ip xfrm policy del ${SDIR} dir out priority 2
"오류: '우선순위' 매개변수에 오류가 있습니다: 알 수 없음"으로 인해 실패합니다. ip xfrm policy del ${SDIR} dir out
우선순위 0 항목을 제거하고(두 번째 호출은 우선순위 5 항목을 제거함) SPI 2에서 트래픽 전송을 시작하지만 항목의 정책 디렉터리가 변경되지 않은 경우에도 SPI 1의 반대쪽 끝 트래픽이 수락을 중지합니다.
내가 무엇을 놓치고 있나요? 트래픽을 방해하지 않고 키를 업데이트하려면 어떻게 해야 합니까?
답변1
그것을 알아 냈습니다 :
ip xfrm state add ${DDIR} proto esp spi ${SPI2} reqid ${SPI} \
mode transport auth sha256 ${SHAKEY2} enc aes ${AESKEY2}
두 노드 모두에서 새 SPI를 수신하고 이전 필수 ID와 연결할 수 있습니다. reqid는 이 SA를 관련 "정책"과 계속 연결합니다.
그런 다음 전송을 위한 새 SPI와 키를 추가하세요. 노드는 즉시 새 키를 사용하기 시작합니다.
ip xfrm state add ${SDIR} proto esp spi ${SPI2} reqid ${SPI} \
mode transport auth sha256 ${SHAKEY2} enc aes ${AESKEY2}
마지막으로 양측이 모두 새 키를 사용하면 이전 키 사용을 중지합니다.
ip xfrm state del ${SDIR} proto esp spi ${SPI}
ip xfrm state del ${DDIR} proto esp spi ${SPI}