Windows를 쓰는 동료는 FortiGate 마법사 프로필을 가져와 일 분 만에 접속한다. 여러분은 같은 벤더 패키지를 Ubuntu에 설치하고 IPsec 탭을 찾지만, 나오는 것은 SSL VPN 포털을 여는 것밖에 모르는 클라이언트다. 그다음에 내리는 결론은 보통 두 번 틀린다. 게이트웨이가 여러분을 거부하는 것도 아니고, Linux 빌드가 망가진 것도 아니다. Fortinet은 그 클라이언트를 SSL VPN 지원만 담아 배포하므로, 모바일 IPsec 프로필이 머물 자리가 없고 IKEv1을 말하는 곳에서 다시 만들어야 한다.

먼저 실제로 어떤 프로토콜을 받았는지 정하라

벤더 클라이언트를 참조 구현으로 취급하는 것을 멈추면 그 재구성은 기계적인 작업이다.

FortiGate 장비는 SSL VPN과 IPsec을 모두 게시하고, 인수인계 메일은 어느 쪽을 받았는지 거의 말해 주지 않는다. 포털 URL에 브라우저식 로그인 페이지가 붙으면 SSL VPN이고, Linux에서 그 답은 openfortivpn이며 아래의 필드 매핑이 아니다. 그룹 식별자에 사전 공유 키가 붙으면 모바일 IPsec이고, 이것을 vpnc와 strongSwan이 다룬다.

여기서 틀리는 것이 Linux 시도가 첫 단계를 마치기 전에 죽는 가장 흔한 이유다: 클라이언트가 HTTPS 포털에 IKEv1을 제시하거나 그 반대인 경우. 무엇이든 설치하기 전에 관리자에게 프로토콜 이름을 서면으로 요청하라.

네 가지 자격 증명이 네 개의 서로 다른 필드로 이동한다

password라는 단어는 대부분의 인수인계에서 두 번 나오고 서로 다른 두 가지를 뜻한다. 사전 공유 키는 피어 자체를 인증하며, 관리자가 게이트웨이 구성에서 읽는 기계 비밀이다. 계정 비밀번호는 그 피어 뒤에 어떤 사람이 있는지 증명하는 별도의 자격 증명이다.

나머지 두 값은 놓치기 쉽다. 그룹 식별자는 마법사가 IPsec 그룹 객체에 기록한 문자열이고, 0은 빈 필드가 아니라 정당한 값이다. 제안은 각 단계의 암호화, 해싱, Diffie-Hellman 그룹과 PFS 설정을 포괄하며, 그 항목 하나하나가 게이트웨이와 일치해야 한다. 연결이 1단계에서 실패하면 거의 항상 이 넷 중 하나가 원인이므로, 하나의 대화 상자에 몰아넣지 말고 따로 적어 두라.

각 vpnc 필드에 무엇이 들어가야 하는가

편집기 프런트엔드와 함께 클라이언트를 설치한 다음 VPNC 연결을 만든다:

sudo apt install vpnc network-manager-vpnc network-manager-vpnc-gnome

게이트웨이에는 FortiGate의 공인 주소를, 그룹 이름에는 게이트웨이의 식별자를 그대로, 맨 영까지 포함해 설정한다. Group password에는 사전 공유 키를, 사용자 이름과 비밀번호에는 계정을 넣고, 토큰이 있으면 게이트웨이가 기대하는 방식대로 덧붙인다. 고급 대화 상자에서 제안이 지목한 Diffie-Hellman 그룹을 고르고, PFS를 같은 그룹에 맞추고, 클라이언트가 가정용 공유기 뒤에 있으면 NAT 통과를 켜고, 데드 피어 감지는 게이트웨이와 같은 보조로 맞춘다.

그룹 이름은 건너뛰기 쉬운 필드다. 선택 사항처럼 보이고 기본값 영이 자리 표시자처럼 보이기 때문이다. 빈 채로 보내면 클라이언트는 게이트웨이가 검증하는 식별자와 다른 것을 보낸다. 그래도 프로필이 실패하면 고급 값을 다른 사이트의 포럼 글이 아니라 동작하는 Windows 클라이언트와 비교하라.

같은 프로필을 strongSwan용으로 쓴 것

이 값들의 장기 보관처로는 strongSwan이 낫다. 구성이 검토하고 보관할 수 있는 텍스트 파일이기 때문이다:

conn office-fw
    keyexchange=ikev1
    aggressive=yes
    left=%any
    leftauth=psk
    leftauth2=xauth
    xauth_identity=YOUR_USER
    right=GATEWAY_ADDRESS
    rightauth=psk
    rightsubnet=OFFICE_SUBNET
    ike=aes128-sha1-modp1536!
    esp=aes128-sha1-modp1536!

블록 앞의 제안 줄을 읽어라. 끝의 느낌표가 의미를 바꾼다. 그 하나의 제안을 고정하고, 그렇지 않으면 클라이언트가 제시할 대안들을 제거한다. 하나의 변환 쌍으로 구성된 게이트웨이는 목록으로 시작하는 클라이언트를 거부하므로, 고정이 협상을 일치로 바꾸는 것이다. 동작하는 게이트웨이 프로필에서 정확한 알고리즘 이름을 가져오고, 자리 표시자는 자신의 값으로 바꿔라.

두 인증 줄은 중복이 아니다. PSK는 피어를, XAuth 블록은 사용자를 증명하며, 둘 중 하나를 빼면 게이트웨이가 끝내지 않을 단계가 남는다.

다른 필드를 바꾸기 전에 실패를 읽어라

대화 상자를 다시 무작위로 만지지 말고 증상에서 거꾸로 가라. 할당된 주소 없이 올라오는 IKE SA는 사용자 인증 교환이 실패했거나 아예 실행되지 않았다는 뜻이므로 계정과 토큰 처리를 확인하라. 끝나지 않는 1단계는 제안, 그룹 식별자, 공격적 모드를 가리키며, 각각은 Windows 클라이언트만이 아니라 게이트웨이와 비교된다.

터널이 맺어진 뒤 몇 분마다 죽는다면 양 끝의 데드 피어 감지가 어긋난 것이다. 곳곳에서 keepalive를 끄지 말고 게이트웨이 타이머에 맞춰라. 터널이 맺어져도 사무실 호스트에 닿지 않는다면 보통 밀어 넣은 서브넷이 로컬 라우팅 테이블에 들어가지 않은 것이고, 서드파티 클라이언트는 그것을 스스로 하지 않을 수 있다.

끝나면 동작하는 값을 게이트웨이 소유자에게 돌려줘라. 프로토콜, 그룹 식별자, 사전 공유 키, 제안, PFS, DPD 결정이다. 그러면 다음 Linux 머신은 저녁 하나가 아니라 몇 분이면 되고, 그룹 이름이 영이었다는 사실을 아무도 다시 발견할 필요가 없다.

관련 글