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の設定
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でルーティングが切られる。
最終更新:2014年12月31日 23:58