Help us understand the problem. What is going on with this article?

CentOS7でl2tp方式のVPNサーバーを建てる

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした