OpenVSwitch, IPSec 연동 VPN 구성하기

박천수·2022년 5월 16일

OpenVSwitch

목록 보기
1/3
post-thumbnail

시작에 앞서..

  • OpenVSwitch(이하 OVS)와 VPN에 대한 배경지식을 필요로 한다.

목표

  • 하나의 단말에서 OVS에 기반한 논리 토폴로지 생성하여 목적에 맞는 네트워크망에 접속한다.

    ex1). OVS_Bridge#1 : 내부망 네트워크
    ex2). OVS_Bridge#2 : 외부망 네트워크

  • 각 생성된 OVS_Bridge#N을 적절한 VPN 터널링을 통해 목적에 맞는 망으로써 역할을 하게 한다.

    ex1). OVS_Bridge#1을 사내의 VPN과 연동하여 사내 서비스 혹은 사내의 논리 단말로 사용.

  • Nested VPN을 통해 다중으로 VPN이 엮여있는 경우 OVS_Bridge cascade 구성으로 통신 가능한지 검증 한다.

사용 도구

  • OpenVSwitch(ver. bullseye)
  • StrongSwan(ver. bullseye)
  • Qemu(ver. bullseye)
    • 각 네트워크망 통신 테스트를 위함

구성

  • 목표 구성도
  • VM 단말 구성(구성도상 좌측 단말 1EA)

Bridge#1 생성
# ovs-vsctl add-br br-ipsec
# ip addr add 10.10.10.1/24 dev br-ipsec
# ip link set br-ipsec up
-----------------------------------------------------------------------------

  • 이 시점에서 단말에 라우팅 룰이 잡힌다
    10.10.10.0/24 dev br-ipsec proto kernel scope link src 10.10.10.1

Bridge#2 생성
# ovs-vsctl add-br br-ipsec2
# ip addr add 10.0.0.1/24 dev br-ipsec2
# ip link set br-ipsec2 up
-----------------------------------------------------------------------------

  • 이 시점에서 단말에 라우팅 룰이 잡힌다
    10.0.0.0/24 dev br-ipsec2 proto kernel scope link src 10.0.0.1

Bridge#1과 VPN 연동
# ovs-vsctl add-port br-ipsec tun
# ovs-vsctl set interface tun type=gre options:remote_ip=$Eth#3 options:psk= "TestString"
# ovs-vsctl set interface tun options:ipsec_encapsulation=yes
# ovs-vsctl set Interface tun options:local_ip=$Eth#1
-----------------------------------------------------------------------------

  • IPSec Handshake 방식은 PSK로 진행.
  • OVS 커맨드를 통한 이 시점에서 strongswan이 사용하는 /etc/ipsec.conf에 필요한 값들이 설정된다.
    • strongswan의 config를 직접 작성하지 않아도 OVS를 통해 IPsec을 구성하면 얻을 수 있는 장점이다.

Bridge#2과 VPN 연동
# ovs-vsctl add-port br-ipsec2 tun2
# ovs-vsctl set interface tun2 type=gre options:remote_ip=$Eth#4 options:psk="TestString"
# ovs-vsctl set interface tun2 options:ipsec_encapsulation=yes
# ovs-vsctl set Interface tun2 options:local_ip=$Eth#2
-----------------------------------------------------------------------------

  • IPSec Handshake 방식은 PSK로 진행.
  • 위 구성도처럼 nic이 1개인 경우 sub ip를 추가한 후 설정
  • 라우팅 룰 생성

    • 라우팅 룰 추가 이유
      • tun2에서 발송하는 패킷이 tun을 타고 나가야 한다.
      • tun2에서 생성하는 패킷의 목적지는 원격지IP#2이다.
      • 따라서 원격지IP#2의 라우팅은 단말의 default 라우팅에 따라 외부로 보내질 것이다.
      • 이를 막기 위해 스태틱 라우팅(32bit)을 추가하여 tun2에서 발생한 모든 패킷을 tun으로 보내보자.
      • ip route add $Eth#4 dev br-ipsec proto kernel scope link src 10.10.10.1 metric 5
  • VM 단말 구성 결과

  • 네트워크망 단말 구성(구성도상 우측 단말 2EA)

Network#1


Bridge#1 생성
# ovs-vsctl add-br br-ipsec
# ip addr add 10.10.10.2/24 dev br-ipsec
# ip link set br-ipsec up
-----------------------------------------------------------------------------
# ovs-vsctl add-port br-ipsec tun
# ovs-vsctl set interface tun type=gre options:remote_ip=$Eth#1 options:psk= "TestString"
# ovs-vsctl set interface tun options:ipsec_encapsulation=yes
# ovs-vsctl set Interface tun options:local_ip=$Eth#3
-----------------------------------------------------------------------------

Network#2


Bridge#1 생성
# ovs-vsctl add-br br-ipsec
# ip addr add 10.0.0.2/24 dev br-ipsec
# ip link set br-ipsec up
-----------------------------------------------------------------------------
# ovs-vsctl add-port br-ipsec tun
# ovs-vsctl set interface tun type=gre options:remote_ip=$Eth#2 options:psk= "TestString"
# ovs-vsctl set interface tun options:ipsec_encapsulation=yes
# ovs-vsctl set Interface tun options:local_ip=$Eth#4
-----------------------------------------------------------------------------

검증

  • VM 단말
    • VM 실행(Qemu 기반) 및 br-ipsec2 Bridge로 tap 연동
      • VM IP를 사내 대역으로 설정(이로써 해당 VM이 사내에 논리적으로 만들어진 것과 같음)
    • VM 단말에서 Wireshark 실행 후 패킷 캡처
    • VM에서 "Ping 8.8.8.8" 커맨드 입력
    • br-ipsec2에 연동한 VM에서 발생한 패킷이 모두 br-ipsec을 통해 통신하는 모습
    • 원격지 네트워크#2(10.0.0.0/24 대역)를 통해 ISP와 통신하여 리턴받는 모습

결과

  • "Ping 8.8.8.8" 패킷 flow

  • 원격지 Network 기반 통신 확인

  • Nested VPN 작동 확인

구성 중 이슈 공유

  • Strongswan 패키지와 암호화 지원 패키지는 따로 존재한다.
    • Strongswan만 설치하였을 때 경우에 따라 IPSec Handshake 단계에서 실패할 수 있다.
profile
OS, Virtual Machine, Network velog

1개의 댓글

comment-user-thumbnail
2022년 5월 19일

존경합니다

답글 달기