Setup L2TP over IPSec VPN Client on gentoo

とくにgentooとは限らないですが、LinuxでVPNクライアントを設定する方法が難しいので貼っておきます。

クライアントで必要なデーモン

他の方法でもVPN接続可能だとは思いますが、このエントリでは以下の2つのデーモンを使って接続します。

  1. strongswan
  2. xl2tpd

strongswanでIPSecを張って、xl2tpdでIPSec上でL2TPを利用してpppフレームを流すというものです。

カーネル設定

IPSecを行うので、カーネルでハッシュアルゴリズムを利用可能にし、ネットワークデバイスでは ppp (Point to Point Protocol)などは有効またはモジュールでビルドしたカーネルで起動しておく。

暗号化・ハッシュアルゴリズム設定

Cryptographic options --->
  [*] Cryptographic API
  [*] HMAC support
  [M] MD5 digest algorithm
  --- SHA1 digest algorithm
  [M] SHA256 digest algorithm
  [M] SHA384 and SHA512 digest algorithms
  [M] DES and Triple DES EDE cipher algorithms
  [M] ARC4 cipher algorithm
  [M] Deflate compression algorithm

ネットワークデバイス設定

Device Drivers --->
  Networking support --->
    <M>   PPP (point-to-point protocol) support
    <M>     PPP BSD-Compress compression
    <M>     PPP Deflate compression
    [*]     PPP filtering
    <M>     PPP MPPE compression (encryption)
    [*]     PPP multilink support
    <M>     PPP over Ethernet
    <M>     PPP over IPv4 (PPTP)
    <M>     PPP over L2TP
    <M>     PPP support for async serial ports
    <M>     PPP support for sync tty ports

パッケージのインストール

必要なパッケージをインストールする、他のディストリビューションの場合、適切読み替えるか、調整してください。

strongswan

ご利用の環境に合わせて、USEを決めてインストールしてください。

shell(root)> USE="dhcp networkmanager gcrypt strongswan_plugins_blowfish strongswan_plugins_ipseckey" emerge net-vpn/strongswan

xl2tpd

shell(root)> emerge net-dialup/xl2tpd

ppp

shell(root)> USE="dhcp eap-tls gtk ipv6 pam" emerge net-dialup/ppp

念のため、pptpclientも入れておく。

shell(root)> emerge net-dialup/pptpclient

networkmanager-l2tp

GUIを利用して接続設定を作成したりする場合はインストールを推奨。

shell(root)> USE="gnome" emerge -pv net-vpn/networkmanager-l2tp

remmina

そして、接続したあとに利用する、GUIクライアント。

shell(root)> emerge net-misc/remmina

VPNクライアントの設定

VPNの接続設定ですが、L2PTをつかうとの、相手がYamaha系ルータのエンドポイントに接続するので、トランスポートモードで接続する設定になります。

strongswanの設定

ルータとのIPSecよる接続の設定になります、事前にネットワーク管理者へルータ情報を提供してもらい設定を行う。

# ipsec.conf - strongSwan IPsec configuration file

# basic configuration            

config setup          
        # strictcrlpolicy=yes
        # uniqueids = no

conn vpn-sample-conn              # 接続名
    auto=start                    # Service起動でIPsecトンネルを張る
    type=transport                # L2TPでトランスポート設定
    authby=secret                 # 認証方法はPSK
    keyexchange=ikev1             # 鍵交換アルゴリズムはIKE ver 1
    ike=aes128-sha1-modp1024      # IKE暗号化アルゴリズム
    esp=aes128-sha1               # ESP暗号化アルゴリズム
    left=%defaultroute            # クライアントがdefault router
    right=aaa.bbb.ccc.ddd         # 接続先ルータIP
    rightid=192.168.55.1           # 接続先ローカルIPアドレス
    rightsubnet=192.168.55.0/24    # 接続先ローカルネットワーク
    compress=no
    ikelifetime=8h                # IKEライフタイム(8時間)
    lifetime=8h                   # SAライフタイム(8時間)
    keyingtries=%forever
    leftprotoport=17/1701         # クライアント側のトランスポート番号(L2TP -> UDP:1701)
    rightprotoport=17/1701        # 接続先ルータ側のトランスポート番号(L2TP -> UDP:1701)
    dpddelay=20                   # 20秒ごとにdpdパケットを送信
    dpdtimeout=120                # タイムアウトは120
    dpdaction=restart             # DPDがタイムアウトしたらトンネルを貼り直し
    closeaction=restart           # トンネル切断したらトンネルを貼り直し

ルータとの接続に利用するPSK(Pre Shared Key)の設定です。

%any aaa.bbb.ccc.ddd : PSK "PSKパスワード"

xl2tpdの設定

L2TPを利用するための設定。

[lac name777]
lns = aaa.bbb.ccc.ddd
name = name777
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd.router
length bit = yes
require chap = yes
refuse pap = yes
require authentication = yes
redial = yes
redial timeout = 15
max redials = 6
name name777

ipcp-accept-local
ipcp-accept-remote
refuse-eap
require-mschap-v2
noccp
noauth                # 認証を設定しない。
idle 1800
mtu 1410              # 最大転送単位 (MTU)
mru 1410              # 最大受信単位 (MRU)
nodefaultroute        # 接続先ルータをdefrouterにしない
usepeerdns
debug
connect-delay 5000
name zzzzzzzzzz       # L2TPのユーザ名
password vvvvvvvvvvvv # L2TPのパスワード

起動する

デーモンを起動する。

shell(root)> systemctl restart strongswan
shell(root)> systemctl start xl2tpd

IPSecを張る。

shell(root)> ipsec start

ppp0ネットワークデバイスを作成し、L2TPでトンネルしてpppで認証する。

shell(root)> xl2tpd-control connect name777

パケットをルーティングして、VPNのパケットはppp0から出るようにする。

shell(root)> ip route add 192.168.55.0/24 via 192.168.55.1 dev ppp0

ggg.hhh.0.1の向こうにいる、マシンにpingを打って帰ってくればVPN接続は完了です、問題が或る場合は journalctl -f しながら検証すると良いかもしれません。

Remminaの設定

接続が完了すれば、RemminaなどのクライアントでWindowsへRDPできます。

Windows10へ接続

ここのログインIDとパスワードはWindowsで定義されるものです。

用語

横文字の用語が多くて大変ですが簡単にまとめると

横文字 説明
AES Advanced Encryption Standard 共通鍵暗号化方式、ビット数が大きい方が強度はあるが計算コストは高い
IPSec IPパケット単位で暗号化と改竄検知をなどを提供するプロトコル、トンネルモードとトランスポートモードがある
IKE Internet Key Exchange 鍵交換プロトコル SAを構築するための鍵を交換するプロトコル、バージョン1とバージョン2がある
SA Security Association ピア間に張る単方向コネクション、そのため双方向通信には2本張る
ESP Encapsulated Security Payload ペイロードの暗号化と認証(改竄検出のためのもの)
L2TP Layer2 Tunneling Protocol データリンク層でピア間を接続するトンネルプロトコル暗号化機能がないのでL3のIPSecなどと併用される
PPP Point to Point Protocol 2点間を接続して通信を行うプロトコル

説明が足りませんが、主にこんなところです、LinuxでVPNをやる場合はある程度理解した上で利用しましょう、面倒くさいので、WindowsかMacで接続したほうがいいと思います。

Posted on 2021-01-05 21:23:43

はじめまして

お茶の国静岡で、焼酎のお茶割なんか罰当たりで飲んだことはありません、常に一番搾りを嗜む静岡極東のBBQerです、最近まわりのエンジニアの方々がお料理を上手にやっている姿を恨めしそうに横目に見ながら、軟骨ピリ辛チクワを食べています、みなさんよろしく。

Posted

Amazon

tags