options.xl2tpdのオプションで引っかかったのでかきかき

  1. SELinuxを無効にする
    セキュリティ系の何かで、いつも切られてるやつを例によって無効化。なにに使うんだろうこれ。/etc/sysconfig/selinuxを編集。

    /etc/sysconfig/selinux
        # This file controls the state of SELinux on the system.
        # SELINUX= can take one of these three values:
        #     enforcing - SELinux security policy is enforced.
        #     permissive - SELinux prints warnings instead of enforcing.
        #     disabled - No SELinux policy is loaded.
        #SELINUX=enforcing <- コメントアウト
        SELINUX=disabled   <- 追記
        # SELINUXTYPE= can take one of three two values:
        (後略)
    

    編集後再起動で反映される。

  2. epelリポジトリを追加
    必要なパッケージのあるリポジトリが標準で追加されていないので追加。

      $ sudo yum install epel-release
      $ sudo yum update
    
  3. パッケージのインストール
    必要なパッケージは xl2tplibreswan、検証用に lsof(これはすでに入ってる可能性あり)

      $ sudo yum install xl2tpd libreswan lsof
    
  4. xl2tpの設定
    ここからはrootになっていたほうが都合がいい

    1. 設定ファイルのバックアップ

      # cp /etc/xl2tpd/xl2tpd.conf /etc/xl2tpd/xl2tpd.conf.origin
      # cp /etc/ppp/options.xl2tpd /etc/ppp/options.xl2tpd.origin
      # cp /etc/ppp/chap-secrets /etc/ppp/chap-secrets.origin
      
    2. 設定の編集 以下は自分の場合

      • xl2tpd.conf
      xl2tpd.conf
      (前略)
      [global]
      listen-addr = (サーバーのローカルip)
      (中略)
      [lns default]
      ip range = 192.168.11.201-192.168.11.221 (クライアントに割り当てるローカルip)
      local ip = (サーバーのローカルip)
      require chap = yes
      refuse pap = yes
      require authentication = yes
      name = xl2tpd <- ここはこうした方が安心らしい?
      (後略)
      
      • options.xl2tpd

      最近のアップデートでcrtsctslockというオプションがなくなったらしく、これをコメントアウトしないとxl2tpが起動に失敗してしまう。

      options.xl2tpd
      (前略)
      #crtscts
      (中略)
      #lock 
      (中略 末尾に追加)
      name xl2tpd
      refuse-pap
      refuse-chap
      refuse-mschap
      require-mschap-v2
      persist
      logfile /var/log/xl2tpd.log
      

      ついでにこのログファイルも作っておく

      # touch /var/log/xl2tpd.log
      
      • chap-secrets
      chap-secrets
      # Secrets for authentication using CHAP
      # client        server  secret                  IP addresses
      "ユーザー名" "xl2tpd" "シークレット" *
      
  5. IPsecの設定
    上と同じ感じ。

    1. 設定ファイルのバックアップ

      $ sudo cp /etc/ipsec.conf /etc/ipsec.conf.origin
      
    2. 設定の編集

      • ipsec.conf

        ipsec.conf
        (前略)
        include /etc/ipsec.d/*.conf <- コメントアウトされていた場合は外す
        
      • /etc/ipsec.d/l2tp-ipsec.conf (新規作成)

        /etc/ipsec.d/l2tp-ipsec.conf
        conn L2TP-PSK-NAT
            rightsubnet=0.0.0.0/0
            dpddelay=10
            dpdtimeout=20
            dpdaction=clear
            forceencaps=yes
            also=L2TP-PSK-noNAT
        conn L2TP-PSK-noNAT
            authby=secret
            pfs=no
            auto=add
            keyingtries=3
            rekey=no
            ikelifetime=8h
            keylife=1h
            type=transport
            left=(サーバーのローカルip)
            leftprotoport=17/1701
            right=%any
            rightprotoport=17/%any
        
      • /etc/ipsec.d/default.secrets (新規作成)

         : PSK "事前共有鍵"
        
  6. ファイヤウォールの設定
    必要なサービスとポートを解放する。
    環境がNATの中の場合はこれとは別にルーターでポート開放設定の必要あり

      # firewall-cmd --permanent --add-service=ipsec
      # firewall-cmd --permanent --add-port=1701/udp
      # firewall-cmd --permanent --add-port=4500/udp
      # firewall-cmd --permanent --add-masquerade
      # firewall-cmd --reload
    
  7. カーネルパラメータの変更
    この設定がないとipsecが怒る(無知)。/etc/sysctl.d/60-ipsec.confを作成して内容を以下の様にする。ただし、np63s0の箇所はそれぞれのネットワークアダプタ名に置換する必要がある。ネットワークアダプタ名は$ip aで調べられる

      net.ipv4.ip_forward = 1
      net.ipv4.conf.all.accept_redirects = 0
      net.ipv4.conf.all.rp_filter = 0
      net.ipv4.conf.all.send_redirects = 0
      net.ipv4.conf.default.accept_redirects = 0
      net.ipv4.conf.default.rp_filter = 0
      net.ipv4.conf.default.send_redirects = 0
      net.ipv4.conf.np63s0.accept_redirects = 0
      net.ipv4.conf.np63s0.rp_filter = 0
      net.ipv4.conf.np63s0.send_redirects = 0
      net.ipv4.conf.lo.accept_redirects = 0
      net.ipv4.conf.lo.rp_filter = 0
      net.ipv4.conf.lo.send_redirects = 0
    

    作成後適用する。

      # sysctl --system
    
  8. サービスの有効化と再起動
    以下のコマンドでサービスを有効化&再起動

      # systemctl enable ipsec
      # systemctl enable xl2tpd
      # systemctl restart ipsec
      # systemctl restart xl2tpd
    
  9. 起動の確認
    lsofを実行して、1701ポートをLISTENしていればサービスは動いてる。

      # lsof -i:1701
      COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
      xl2tpd  3505 root    3u  IPv4  33488      0t0  UDP hostname:l2tp
    

参考:
L2TP/IPsec VPNサーバの構築
http://d.hatena.ne.jp/xlc/20170804/1501857811
CentOS6/7 で VPN 構築
http://mix3.github.io/blog/2015/05/09/20150509/
CentOS7のL2TP仕様が若干変わっていた
https://ameblo.jp/j-drucker/entry-12240489746.html

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.