4.6.3. Libreswan을 사용하여 호스트-호스트 VPN 만들기
“왼쪽” 과 “오른쪽” 이라는 두 호스트 간에 호스트 간
IPsec
VPN을 생성하도록 Libreswan 을 구성하려면 새로운 원시 RSA 키 쌍을 생성하기 위해 두 호스트 모두에 root
로 다음 명령을 입력합니다.“” “”
~]# ipsec newhostkey --output /etc/ipsec.d/hostkey.secrets
Generated RSA key pair with CKAID 14936e48e756eb107fa1438e25a345b46d80433f was stored in the NSS database
이를 통해 호스트에 대한 RSA 키 쌍이 생성됩니다. RSA 키를 생성하는 프로세스는 특히 엔트로피가 낮은 가상 머신에서 몇 분이 걸릴 수 있습니다.
호스트에 공개 키를 “왼쪽으로” 지정할 수 있도록 호스트 공개 키를 보려면 “newhostkey” 명령에서 반환한 CKAID를 사용하여 새 hostkey가 추가된 호스트에서
root
로 다음 명령을 실행합니다.
~]# ipsec showhostkey --left --ckaid 14936e48e756eb107fa1438e25a345b46d80433f
# rsakey AQPFKElpV
leftrsasigkey=0sAQPFKElpV2GdCF0Ux9Kqhcap53Kaa+uCgduoT2I3x6LkRK8N+GiVGkRH4Xg+WMrzRb94kDDD8m/BO/Md+A30u0NjDk724jWuUU215rnpwvbdAob8pxYc4ReSgjQ/DkqQvsemoeF4kimMU1OBPNU7lBw4hTBFzu+iVUYMELwQSXpremLXHBNIamUbe5R1+ibgxO19l/PAbZwxyGX/ueBMBvSQ+H0UqdGKbq7UgSEQTFa4/gqdYZDDzx55tpZk2Z3es+EWdURwJOgGiiiIFuBagasHFpeu9Teb1VzRyytnyNiJCBVhWVqsB4h6eaQ9RpAMmqBdBeNHfXwb6/hg+JIKJgjidXvGtgWBYNDpG40fEFh9USaFlSdiHO+dmGyZQ74Rg9sWLtiVdlH1YEBUtQb8f8FVry9wSn6AZqPlpGgUdtkTYUCaaifsYH4hoIA0nku4Fy/Ugej89ZdrSN7Lt+igns4FysMmBOl9Wi9+LWnfl+dm4Nc6UNgLE8kZc+8vMJGkLi4SYjk2/MFYgqGX/COxSCPBFUZFiNK7Wda0kWea/FqE1heem7rvKAPIiqMymjSmytZI9hhkCD16pCdgrO3fJXsfAUChYYSPyPQClkavvBL/wNK9zlaOwssTaKTj4Xn90SrZaxTEjpqUeQ==
아래에 설명된 대로 두 호스트의 구성 파일에 추가하려면 이 키가 필요합니다. CKAID를 잊어 버린 경우 다음을 사용하여 시스템의 모든 호스트 키 목록을 얻을 수 있습니다.
~]# ipsec showhostkey --list
< 1 > RSA keyid: AQPFKElpV ckaid: 14936e48e756eb107fa1438e25a345b46d80433f
키 쌍의 시크릿 부분은
/etc/ipsec.d/*.db
에 있는 “NSS 데이터베이스에” 저장됩니다.
이 호스트 간 터널에 대한 구성 파일을 만들기 위해
왼쪽rsasigkey=
및 rightrsasigkey=
from 위의 줄은 /etc/ipsec.d/
디렉터리에 배치된 사용자 지정 구성 파일에 추가됩니다.
root
로 실행되는 편집기를 사용하여 다음 형식으로 적절한 이름으로 파일을 생성합니다.
/etc/ipsec.d/my_host-to-host.conf
다음과 같이 파일을 편집합니다.
conn mytunnel leftid=@west.example.com left=192.1.2.23 leftrsasigkey=0sAQOrlo+hOafUZDlCQmXFrje/oZm [...] W2n417C/4urYHQkCvuIQ== rightid=@east.example.com right=192.1.2.45 rightrsasigkey=0sAQO3fwC6nSSGgt64DWiYZzuHbc4 [...] D/v8t5YTQ== authby=rsasig # load and initiate automatically auto=start
공개 키는 RSAID 대신 CKAID로 구성할 수도 있습니다. 이 경우 “leftrsasigkey=”대신 “leftckaid=” 을 사용합니다.
왼쪽 및 오른쪽 호스트 모두에서 동일한 구성 파일을 사용할 수 있습니다. Libreswan이 지정된 IP 주소 또는 호스트 이름을 기반으로 “왼쪽” 인지 “오른쪽” 인지 자동으로 감지합니다. 호스트 중 하나가 모바일 호스트인 경우
IP
주소를 미리 알 수 없는 경우 모바일 클라이언트에서 %defaultroute
를 IP
주소로 사용합니다. 그러면 동적 IP
주소가 자동으로 선택됩니다. 들어오는 모바일 호스트의 연결을 수락하는 정적 서버 호스트에서 IP
주소에 %any
을 사용하여 모바일 호스트를 지정합니다.
leftrsasigkey
값이 “왼쪽” 호스트에서 가져와 rightrsasigkey
값을 “올바른” 호스트에서 가져왔는지 확인합니다. right ckaid와 rightckaid
를 사용할 때도 적용됩니다.
ipsec
을 재시작하여 새 구성을 읽고 부팅 시 시작되도록 구성된 경우 터널이 설정되었는지 확인합니다.
~]# systemctl restart ipsec
auto=start
옵션을 사용하면 IPsec
터널을 몇 초 내에 설정해야 합니다. 다음 명령을 루트로
입력하여 수동으로 터널을 로드하고 시작할 수 있습니다.
~]# ipsec auto --add mytunnel ~]# ipsec auto --up mytunnel
4.6.3.1. Libreswan을 사용하여 호스트-호스트 VPN 확인
IKE
협상은 UDP
포트 500 및 4500에서 이루어집니다. IPsec
패킷은 Encapsulated Security Payload
(ESP) 패킷으로 표시됩니다. ESP
프로토콜에는 포트가 없습니다. VPN 연결이 NAT 라우터를 통과해야 하는 경우 ESP
패킷은 포트 4500의 UDP
패킷으로 캡슐화됩니다.
패킷이 VPN 터널을 통해 전송되는지 확인하려면 다음 형식으로
root
로 명령을 실행합니다.
~]# tcpdump -n -i interface esp or udp port 500 or udp port 4500
00:32:32.632165 IP 192.1.2.45 > 192.1.2.23: ESP(spi=0x63ad7e17,seq=0x1a), length 132
00:32:32.632592 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x4841b647,seq=0x1a), length 132
00:32:32.632592 IP 192.0.2.254 > 192.0.1.254: ICMP echo reply, id 2489, seq 7, length 64
00:32:33.632221 IP 192.1.2.45 > 192.1.2.23: ESP(spi=0x63ad7e17,seq=0x1b), length 132
00:32:33.632731 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x4841b647,seq=0x1b), length 132
00:32:33.632731 IP 192.0.2.254 > 192.0.1.254: ICMP echo reply, id 2489, seq 8, length 64
00:32:34.632183 IP 192.1.2.45 > 192.1.2.23: ESP(spi=0x63ad7e17,seq=0x1c), length 132
00:32:34.632607 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x4841b647,seq=0x1c), length 132
00:32:34.632607 IP 192.0.2.254 > 192.0.1.254: ICMP echo reply, id 2489, seq 9, length 64
00:32:35.632233 IP 192.1.2.45 > 192.1.2.23: ESP(spi=0x63ad7e17,seq=0x1d), length 132
00:32:35.632685 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x4841b647,seq=0x1d), length 132
00:32:35.632685 IP 192.0.2.254 > 192.0.1.254: ICMP echo reply, id 2489, seq 10, length 64
인터페이스는 트래픽을 전달하는 것으로 알려진 인터페이스입니다. tcpdump 로 캡처를 종료하려면 Ctrl+C 누릅니다.
참고
tcpdump 명령은
IPsec
과 약간의 예기치 않게 상호 작용합니다. 발신된 일반 텍스트 패킷이 아닌 발신 암호화된 패킷만 볼 수 있습니다. 암호화된 수신 패킷과 암호가 해독된 수신 패킷을 확인할 수 있습니다. 가능한 경우 두 시스템 간의 라우터에서 tcpdump 를 실행하고 엔드포인트 자체에서 실행되지 않습니다. VTI(Virtual Tunnel Interface)를 사용하는 경우 물리적 인터페이스의 tcpdump는 ESP
패킷을 표시하는 반면, VTI 인터페이스의 tcpdump에는 일반 텍스트 트래픽이 표시됩니다.
터널이 비정상적으로 설정되었는지 확인하고 터널을 통해 트래픽이 얼마나 사라졌는지 추가로 확인하려면
root
로 다음 명령을 입력합니다.
~]# ipsec whack --trafficstatus
006 #2: "mytunnel", type=ESP, add_time=1234567890, inBytes=336, outBytes=336, id='@east'