IPv4over IPv6를 구성하는 VPN 터널

strongSwan을 사용하여 IPv4over IPv6의 VPN 터널을 구축합니다.최종 목표는 야마하 공유기의 거점과 연결하는 것으로 이번에는 AWS에 실례를 만들어 검증하기 위한 것이다.

구조도



터미널 A와 터미널 B가 통신할 수 있도록 스트롱스완 A와 스트롱스완 B 두 기계에 IPSec 터널을 가설한다.이번 구성례에서 VPCA(172.31.0.0/16)와 Subnet B-1(192.168.0.0/24)에 속하는 단말기는 서로 자유롭게 연결할 수 있다.
  • strongSwan A, B 사양
  • AMI : Ubuntu Server 20.04 LTS (ami-0d1f7bec0e294ef80)
  • 실례 유형: t4g.nano
  • strongSwan 5.8.2
  • 생성 과정


    초기 설정

    # OSの初期アップデート
    sudo apt update
    sudo apt upgrade -y
    
    # strongSwanとswanctlのインストール
    sudo apt install strongswan strongswan-swanctl -y
    
    # インターフェース間のパケット転送を許可
    echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
    sudo sysctl -p
    
    swanctl을 이용하기 위해, charon.conf의 start-scripts에 다음 내용을 추가합니다.
    /etc/strongswan.d/charon.conf
    charon {
     (省略)
     start-scripts {
       swanctl = /usr/sbin/swanctl -q
     }
     (省略)
    }
    
    또한 시스템이strongSwan을 시작할 수 있도록 프로필을 만듭니다.
    /etc/systemd/system/strongswan.service
    [Unit]
    Description=strongSwan
    
    [Service]
    Type=forking
    ExecStart=/usr/sbin/ipsec start
    ExecStop=/usr/sbin/ipsec stop
    
    [Install]
    WantedBy=multi-user.target
    
    sudo systemctl start strongswan
    sudo systemctl enable strongswan
    

    연결 설정


    다음은 strongSwanA의 설정입니다.strongSwanb를 설정할 때 자신과 연결 목표의 표식을 교체해야 합니다.
    /etc/swanctl/conf.d/connection.conf
    connections {
    
       net-net {
          local_addrs  = XXXX:XXXX::10 #自身(strongSwanA)のIPv6アドレス
          remote_addrs = YYYY:YYYY::10 #接続先(strongSwanB)のIPv6アドレス
    
          local {
             auth = psk
             id = XXXX:XXXX::10 #自身(strongSwanA)のIPv6アドレス
          }
          remote {
             auth = psk
             id = YYYY:YYYY::10 #接続先(strongSwanB)のIPv6アドレス
    
          }
          children {
             net-net {
                local_ts  = 172.31.0.0/16 #自身(strongSwanA)側のCIDR
                remote_ts = 192.168.0.0/24 #接続先(strongSwanB)側のCIDR
                esp_proposals = aes128-sha256-x25519
             }
          }
          version = 2
          mobike = no
          proposals = aes128-sha256-x25519
       }
    }
    
    secrets {
     ike-1 {
      id = XXXX:XXXX::10 #自身(strongSwanA)のIPv6アドレス
      secret = "pre-shared-key-password"
     }
    }
    
    참조: https://www.strongswan.org/testing/testresults/ipv6/net2net-ip4-in-ip6-ikev2/

    VPN 세션 설정


    이번에는 strong SwanA부터 strong SwanB까지 세션을 진행한다.먼저 strongSwanB에서 설정을 가져오려면 strongSwan을 다시 시작합니다.로그를 보려면 sudo swanctl --log 를 수행합니다.이 명령을 실행하면 로그를 실시간으로 볼 수 있습니다.
    strongSwanB
    sudo systemctl restart strongswan
    sudo swanctl --log
    
    그런 다음 strongSwana 측면에서 설정을 읽고 VPN 세션을 확장합니다.
    strongSwanA
    sudo systemctl restart strongswan
    sudo swanctl -i -c net-net 
    

    AWS 측면 설정


    이전 설정에서 핑은 strongSwanA와 strongSwanB 사이를 통과해야 합니다.터미널 A와 터미널 B 사이의 연결을 위해서는 AWS 측에서 대상 검사 및 루트 테이블을 비활성화해야 합니다.

    미해결 이벤트


    운영체제가 재부팅될 때 다음 로그가 표시됩니다. strongSwan은 시작할 수 없습니다.systemctl restart strongswan 고칠 수 있으니 우선 방치하라.
     systemd[1]: Starting strongSwan...
     ipsec[529]: Starting strongSwan 5.8.2 IPsec [starter]...
     ipsec_starter[529]: Starting strongSwan 5.8.2 IPsec [starter]...
     ipsec[529]: starter is already running (/var/run/starter.charon.pid exists) -- no fork done
     ipsec_starter[529]: starter is already running (/var/run/starter.charon.pid exists) -- no fork done
     ipsec[545]: Stopping strongSwan IPsec...
     systemd[1]: strongswan.service: Succeeded.
     systemd[1]: Started strongSwan.
    

    참조 사이트


    IPv6 Configuration Examples - strongSwan
    swanctl - strongSwan

    좋은 웹페이지 즐겨찾기