
ip xfrm
ISIS를 실행하는 데 적합한 명령을 사용하여 두 시스템 간에 IPSEC 터널을 설정해야 합니다 . 웹의 예제 덕분에 ISIS 실행을 제외한 모든 작업에 작동하는 XFRM 또는 VTI 링크를 생성할 수 있습니다(ESP는 IP만 전달하고 ISIS Hello 패킷은 LLC/MAC이기 때문입니다).
또한 시스템 간에 GRETAP 또는 GENEVE 터널을 설정할 수 있으며 ISIS는 이를 통해 작동합니다. 그래서 저는 (가능하다면) ESP를 사용하여 이 터널을 암호화하고 싶습니다.
GRETAP/GENEVE 터널 인터페이스가 생성되는 방법에 대한 세부 정보를 무시하고 다음을 사용하여 IPSEC를 추가하려고 합니다(첫 번째 줄을 제외하고 두 시스템에서 동일한 스크립트 실행).
GW=1 # (or 2, for the other system)
GW1_PUBIP=172.22.0.5
GW2_PUBIP=172.23.0.6
PRIVNET=192.168.12 # address prefix on the GRETAP or GENEVE link
SPI=0x1234
AUTHKEY=0x0123456789ABCDEF0123456789ABCDEF
ENCKEY=0xFEDCBA9876543210FEDCBA9876543210
if [[ $GW == 1 ]]; then
LOC_PUB=$GW1_PUBIP REM_PUB=$GW2_PUBIP LOC_PRI=$PRIVNET.2 REM_PRI=$PRIVNET.3
else
LOC_PUB=$GW2_PUBIP REM_PUB=$GW1_PUBIP LOC_PRI=$PRIVNET.3 REM_PRI=$PRIVNET.2
fi
PUBIP=$(ifconfig eth0 | grep inet | tr -s ' ' | cut -d' ' -f3) # trigger guard
if [[ $PUBIP == $LOC_PUB ]]; then # trigger guard
ip xfrm state flush
ip xfrm policy flush
ip xfrm state add src $LOC_PUB dst $REM_PUB proto esp spi $SPI mode tunnel auth sha256 $AUTHKEY enc aes $ENCKEY
ip xfrm state add src $REM_PUB dst $LOC_PUB proto esp spi $SPI mode tunnel auth sha256 $AUTHKEY enc aes $ENCKEY
ip xfrm policy add src $LOC_PRI dst $REM_PRI dir out tmpl src $LOC_PUB dst $REM_PUB proto esp spi $ID mode tunnel
ip xfrm policy add src $REM_PRI dst $LOC_PRI dir in tmpl src $REM_PUB dst $LOC_PUB proto esp spi $SPI mode tunnel
ip xfrm policy add src $REM_PRI dst $LOC_PRI dir fwd tmpl src $REM_PUB dst $LOC_PUB proto esp spi $SPI mode tunnel
ping -c 5 $REM_PRI
fi
이는 시스템 간 핑에는 작동하지만 전송 트래픽에는 작동하지 않습니다. 또한 두 시스템 사이의 여러 터널에서 작동할지 의심됩니다.
시스템-시스템 트래픽에 대한 Tcpdump 결과(응답 시스템에서):
[root@90c8710c0faa /]# tcpdump -nevi eth0 esp
dropped privs to tcpdump
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
14:26:48.206545 02:42:64:b4:1e:61 > 02:42:ac:17:00:06, ethertype IPv4 (0x0800), length 166: (tos 0x0, ttl 63, id 2297, offset 0, flags [DF], proto ESP (50), length 152)
172.22.0.5 > 172.23.0.6: ESP(spi=0x00001234,seq=0xb), length 132
14:26:48.206589 02:42:ac:17:00:06 > 02:42:64:b4:1e:61, ethertype IPv4 (0x0800), length 166: (tos 0x0, ttl 64, id 5677, offset 0, flags [none], proto ESP (50), length 152)
172.23.0.6 > 172.22.0.5: ESP(spi=0x00001234,seq=0x9), length 132
XFRM 모니터:
[root@90c8710c0faa /]# ip xfrm monitor all
Async event (0x10) replay update
src 172.23.0.6 dst 172.22.0.5 reqid 0x0 protocol esp SPI 0x1234
대중교통의 경우 두 시스템 모두 아무 것도 인쇄하지 않습니다.
답변1
위의 문제는 정책이 로컬 IP 주소를 사용하는 트래픽에만 일치한다는 것입니다. 원격 로컬 IP로 전달되는 릴레이 패킷과 일치하지 않으며, ISIS 패킷과도 일치하지 않습니다. 정책이 공개 주소를 사용하여 캡슐화된 패킷과 일치하므로 다음이 작동합니다.
GW=1 # or 2, for the other system
GW1_PUBIP=172.22.0.5 # ifconfig eth0 | grep inet | tr -s ' ' | cut -d' ' -f3
GW2_PUBIP=172.23.0.6
PRIVNET=192.168.12 # address prefix on the GRETAP link
SPI=0x1234
AUTHKEY=0x0123456789ABCDEF0123456789ABCDEF
ENCKEY=0xFEDCBA9876543210FEDCBA9876543210
if [[ $GW == 1 ]]; then
LOC_PUB=$GW1_PUBIP REM_PUB=$GW2_PUBIP LOC_PRI=$PRIVNET.2 REM_PRI=$PRIVNET.3
else
LOC_PUB=$GW2_PUBIP REM_PUB=$GW1_PUBIP LOC_PRI=$PRIVNET.3 REM_PRI=$PRIVNET.2
fi
PUBIP=$(ifconfig eth0 | grep inet | tr -s ' ' | cut -d' ' -f3)
if [[ $PUBIP == $LOC_PUB ]]; then # trigger guard
ip xfrm state flush
ip xfrm policy flush
ip xfrm state add src $LOC_PUB dst $REM_PUB proto esp spi $SPI mode tunnel auth sha256 $AUTHKEY enc aes $ENCKEY
ip xfrm state add src $REM_PUB dst $LOC_PUB proto esp spi $SPI mode tunnel auth sha256 $AUTHKEY enc aes $ENCKEY
ip xfrm policy add src $LOC_PUB dst $REM_PUB dir out tmpl src $LOC_PUB dst $REM_PUB proto esp spi $SPI mode tunnel
ip xfrm policy add src $REM_PUB dst $LOC_PUB dir in tmpl src $REM_PUB dst $LOC_PUB proto esp spi $SPI mode tunnel
ip xfrm policy add src $REM_PUB dst $LOC_PUB dir fwd tmpl src $REM_PUB dst $LOC_PUB proto esp spi $SPI mode tunnel
ping -c 5 $REM_PRI
fi
이에 대한 제한은 공용 IP 주소(여러 GRETAP 또는 GENEVE 터널과 일치함)에만 키를 지정하기 때문에 두 시스템 간의 다중 터널을 지원하지 않는다는 것입니다.