public network => private network 로 들어가기 위해서는 Dynamic NAT 가 필요하고
private network => public network 로 나가기 위해서는 Static NAT 가 필요하다.
private network <-> public network <-> private network 에서 private끼리 통신하기 위해서는 VPN 기술이 필요하며 이떄 터널링이 사용된다.
사설 ip로 public network에서 통신을 할 수 없기 때문에 public ip가 들어있는 header가 하나 더 씌워진다.
패킷이 private network에서 나갈때 public network와 맞닿아 있는 포트의 public ip를 출발지 주소로 가고싶은 private network와 public network와 맞닿아 있는 포트의 pubic ip를 목적지 주소로 해더를 씌운다. 이것을 터널링이라고 한다.
단순 터널링 만으로는 전용 회선의 보안 수준과 매우 많은 차이가 난다. 그래서 VPN의 보안 수준을 높이기 위해 IPsec Framework가 사용된다.
IPsec Framework에 5개의 protocol이 있으며
IPsec Protocol은 encapsulation 기능을 하고
Confidentiality는 암호화 protocol
Integrity는 무결성 protocol 전송 과정에서 데이터가 오염되었는지 여부를 확인한다. 암호호와 무결성은 data와 key입력은 같다. 하지만 암호화는 복호가 가능하지만 무결성은 해시 함수로 복호가 안되고 더 가볍다는 차이가 있다.
Authentication은 유효한 사용자인지 인증하는 protocol이다.
Diffie-Hellman은 암호화와 무결성을 위한 키 결정과 교환을 담당한다. 이 또한 DH1 -> DH5로 갈수록 보안이 올라간다.
추가로 encapsulation에서 주로 ESP로 data인증과 암호화 정보를 가지고 있는 헤더를 터널링에서 씌운 헤더 뒤에 쓰인다.
IPsec 방식
IPsec VPN에는 2가지 방식이 있다.
1. VPN 라우터끼리 연결하는 Site-to-Site VPN
2. Client와 라우터끼리 연결하는 Client VPN이 있다.
Site-to-Site VPN을 사용하면 따로 클라이언트에서 설정할 필요없이 통신이 된다.
Site-to-Site VPN 과정
총 5단계가 있으며 크게 ISAKMP -> IPsec 순서로 진행된다.
우선 보안 protocol이 서로 일치하는 지 확인한다.
여기서는 3DES 암호화 알고리즘, MD5 해시 알고리즘, 사용자 인증 시에는 Preshare, Diffie-Hellman 키 교환 시에는 Group 2, 이 policy가 일치한 지 확인하는 기간이 lifetime으로 모두 일치한 지 정책을 확인한다.
1단계가 통과하면 키 교환이 일어난다.
위의 그림과 같은 방식으로 서로의 public key를 교환하여 다른 사람들은 알지 못하고 서로만 알고있는 private key인 diffie-hellman key를 구할 수 있다.
다음은 사용자 인증 단계이다. 미리 공유한 key(pre-shared key)와 자신의 public ip로 해시 알고리즘을 통해 hash 값을 구하고 hash 값은 diffie-hellman 키와 함께 암호화 알고리즘을 통해 암호화한다. hash 값과 암호화된 데이터를 모두 패킷에 붙여 보낸다.
패킷을 전달받은 상대편에서 diffie-hellman 키로 복호화 진행하면 이는 해시값이 나온다. 자체적으로 상대 public ip와 pre-shared key를 해시 알고리즘에 넣어 구한 해시값과 비교하여 무결성을 체크한다.
ISAKMP 과정은 끝나고 IPsec 과정이 시작된다. ISAKMP는 라우터끼리 서로 통신했다면 IPsec은 라우터 뒤에 있는 host끼리의 통신이다. host가 보내고 싶은 데이트의 암호화를 위한 정책을 여기서 다시 보안 프로토콜이 같은 지 확인한다.
여기서 암호화가 필요한 데이터들은 ISAKMP에 비해 크기 때문에 비교적 더 가벼운 암호화 알고리즘을 사용한다.
host가 보내고자 하는 데이터를 암호화하고 무결성을 체크하는 단계이다.
이번에는 diffie-hellman 키와 데이터를 가지고 암호화 알고리즘을 먼저 통과한다. 암호화된 데이터를 패킷에 붙이고 암호화된 데이터와 diffie-hellman 키로 해시 알고리즘으로 해시 값을 구한다. 이 해시값도 패킷 뒤에 붙인다.
그리고 터널링을 위해 붙인 public ip 헤더 뒤에 IPsec Protocol인 esp 내용들이 담겨있다.
그래서 총 IPsec VPN을 위해서는 기존보다 2개의 헤더를 더 씌우게 된다.
이 패킷을 전달받은 상대 host는 패킷에 붙어있는 hash 값과 자체적으로 암호화되니 데이터로 구한 해시값을 비교하여 무결성을 확인한다.