OpenWRT L2TP > IPSec(racoon + xl2tpd + pppd)


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

L2TP/IPsec(racoon + xl2tpd + pppd)

前提条件

  • 動的グローバルIPでDDNSを利用
  • IPsecの認証は事前共有鍵方式
  • NAT-Tのみ対応
  • L2接続(VPN接続後はOpenWRTと同一セグメント)
  • GUIに影響が出ないようする
  • OpenWRTのLAN側IPは192.168.1.1/24

動作確認環境

  • BHR-4GRV(OpenWRT 14.07)
  • iPhone 3GS(iOS 6.1.6)
  • Windows 7 SP1(x64)

参考


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

パッケージをインストールする
依存で必要なパッケージもインストールされる
# opkg update
# opkg install ipsec-tools
# opkg install xl2tpd
# opkg install kmod-ipsec4 (IPv6の場合は代わりにkmod-ipsec6が必要と思われる)

DDNSの設定

crontabへDDNSの更新設定の登録
例えば、URLをリクエストしたIPでDNSを更新するサービスの場合で、1時間に1回更新する場合

*/60 * * * * wget -O - 'DDNSサーバの設定URL' > /dev/null 2>&1

IPsec(racoon)の設定

/etc/ipsec.confを作成する
# cat > /etc/ipsec.conf
flush;
spdflush;
spdadd 0.0.0.0/0 192.168.1.1[l2tp] udp -P in  ipsec esp/transport//require;
spdadd 192.168.1.1[l2tp] 0.0.0.0/0 udp -P out ipsec esp/transport//require;
#

事前共有鍵の設定

# cat > /etc/racoon/psk.txt
*	事前共有鍵の文字列
#

/etc/racoon.confの設定

/etc/racoon.confのremote anonymousとsainfoを変更する
https://forum.openwrt.org/viewtopic.php?id=30982」の設定値でも大丈夫

remote anonymous {
       exchange_mode   aggressive,main;
       doi             ipsec_doi;
       situation       identity_only;
       generate_policy on;
       proposal_check  obey;
       nat_traversal   on;
       dpd_delay       20;
       support_proxy   on;
       ike_frag        on;
       passive         on;
       lifetime time 2 min;

       proposal {
               encryption_algorithm    aes;
               hash_algorithm          sha256;
               authentication_method   pre_shared_key;
               dh_group                2;
       }
       proposal {
               encryption_algorithm    aes;
               hash_algorithm          sha1;
               authentication_method   pre_shared_key;
               dh_group                2;
       }
       proposal {
               encryption_algorithm    3des;
               hash_algorithm          sha256;
               authentication_method   pre_shared_key;
               dh_group                2;
       }
       proposal {
               encryption_algorithm    3des;
               hash_algorithm          sha1;
               authentication_method   pre_shared_key;
               dh_group                2;
       }
}

sainfo anonymous
{
       lifetime time 30 minutes;
       encryption_algorithm aes, rijndael, 3des;
       authentication_algorithm hmac_sha1;
       compression_algorithm deflate;
       pfs_group 2;
}

xl2tpdの設定

/etc/xl2tpd/xl2tpd.confの設定をする
ip rangeはDHCPサーバのIP配布レンジを避けること
local ipに192.168.1.1を設定しないこと
なお、接続台数が多い場合はip rangeのレンジを広げる

# cat > /etc/xl2tpd/xl2tpd.conf
[global]
ipsec saref = yes
listen-addr = 192.168.1.1

[lns default]
ip range = 192.168.1.3-192.168.5
local ip = 192.168.1.2
length bit = yes
pppoptfile = /etc/ppp/options.xl2tpd
#

pppdの設定

/etc/ppp/options.xl2tpdを設定する
mschap-v2を利用しているがIPsecで暗号化されているのでpapでも問題ない
# cat > /etc/ppp/options.xl2tpd
auth
name l2tp
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
ms-dns 192.168.1.1
netmask 255.255.255.0
proxyarp
nodefaultroute
lock
deflate 15,15
bsdcomp 15,15
vj-max-slots 16
mtu 1350
mru 1350
#logfile /var/log/xl2tpd.log
#

/etc/ppp/chap-secretsを設定する
# cat >> /etc/ppp/chap-secrets
ユーザー名	l2tp	パスワード	*
#

F/Wの設定

/etc/firewall.userへのルール追加
GUIでPort Foward設定すると、DNATでなくREDIRECTになるのでfirewall.userで設定する
iptables -t nat -A zone_wan_prerouting -p udp -d 0.0.0.0/0 --dport 4500 -j DNAT --to-destination 192.168.1.1:4500 -m comment --comment "Allow-IPsec-IKE"
iptables -t nat -A zone_wan_prerouting -p udp -d 0.0.0.0/0 --dport 500 -j DNAT --to-destination 192.168.1.1:500 -m comment --comment "Allow-IPsec-NAT-T"

firewall.userのreloadを有効化

これをしないとF/Wの再起動時にfirewall.userが読み込まれない
/etc/config/frewallの「option reload '1'」を追記する
config include
       option path '/etc/firewall.user'
       option reload '1' <- この行を追記する

F/Wの穴あけ

firewall.userのDNATと合わせて、500と4500がオープンする
1701はDNATされていないのでWAN側は閉じたままになる
/etc/config/frewallに追記
config rule
       option target 'ACCEPT'
       option src 'wan'
       option proto 'udp'
       option dest_port '4500'
       option name 'Allow-IPsec-NAT-T '
       option dest_ip '192.168.1.1'

config rule
       option target 'ACCEPT'
       option src 'wan'
       option proto 'udp'
       option dest_port '500'
       option name 'Allow-IPsec-IKE'
       option dest_ip '192.168.1.1'

config rule
       option target 'ACCEPT'
       option src 'wan'
       option proto 'udp'
       option dest_port '1701'
       option name 'Allow-L2TP'
       option dest_ip '192.168.1.1'

VPNセグメントの作成

VPN接続時にpppインターフェイスのzoneをlanに入れるため、ダミーのインターフェイス(ppp+)を作成する
但し、インターフェイス名がppp+なので各インターフェイスの正確なパケット数などはカウントされない
ppp0、ppp1のように複数作成すれば、パケットなどをカウントできるようになる(が、面倒だと思う)
/etc/config/networkに以下を追記
config interface 'VPN'
       option proto 'none'
       option ifname 'ppp+'

VPNセグメントをlan zoneに入れる

/etc/config/firewallのzone lanのnetworkにVPNを追加する
config zone
       option name 'lan'
       option input 'ACCEPT'
       option output 'ACCEPT'
       option forward 'ACCEPT'
       option family 'ipv4'
       option network 'lan VPN' <- この行にVPNを追加する

サービスの有効化

# /etc/init.d/racoon enable
# /etc/init.d/xl2tpd enable
# reboot

クライアントから接続する

各クライアントL2TP/IPsecを設定する。

Windowsクライアントの場合は、割り当てるIPによってネットワークセグメントが強制的に決められる。
10.0.0.0/8内で適当な10.*.*.*/24で割り当てると、10.0.0.0/8でルーティングが切られる。