「L2TP/IPsec VPN」の編集履歴(バックアップ)一覧はこちら
「L2TP/IPsec VPN」(2013/05/06 (月) 18:01:03) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
スマホから家のPCにリモートアクセスしたく、ためしにVM上のLinuxを使ってL2TP/IPescのVPN環境を構築してみた。
環境
|No|分類|ソフト|
|01|OS|Ubuntu Server13.04(VirtualBox上のVM)|
|02|IPsec|Openswan|
|03|L2TP|xl2tpd|
** Openswan、xl2tpdのインストール
以下のコマンドでインストールする。
途中X.509証明書を使うか聞かれるが、今回は使わないのでNoにした。
$ sudo apt-get install openswan xl2tpd
** IPsecの設定
以下のファイルに以下を設定。
*** /etc/ipsec.conf ・・・既存を修正
version 2.0 # conforms to second version of ipsec.conf specification
config setup
dumpdir=/var/run/pluto/
nat_traversal=yes
virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:25.0.0.0/8,%v6:fd00::/8,%v6:fe80::/10
oe=off
protostack=netkey
include /etc/ipsec.d/l2tp-psk.conf
***/etc/ipsec.d/l2tp-psk.conf ・・・ipsec.confからinclude 新規作成
conn L2TP-PSK-NAT
rightsubnet=0.0.0.0/0
forceencaps=yes
also=L2TP-PSK-noNAT
conn L2TP-PSK-noNAT
authby=secret
pfs=no
auto=add
keyingtries=3
rekey=no
dpddelay=5
dpdtimeout=30
dpdaction=clear
ikelifetime=8h
keylife=1h
type=transport
left=192.168.11.200 <---VPNサーバのIPアドレス
leftnexthop=%defaultroute
leftprotoport=17/%any
right=%any
rightprotoport=17/%any
***/var/lib/openswan/ipsec.secrets.inc ・・・/etc/ipsec.secretsからincluse 新規作成
: PSK "事前共有鍵(任意の文字列)"
** L2TPの設定
以下のファイルに以下を設定。
***/etc/xl2tpd/xl2tpd.conf ・・・既存修正
[global] ; Global parameters:
[lns default] ; Our fallthrough LNS definition
ip range = 192.168.11.100-192.168.11.103 ; * Allocate from this IP range <--VPNクライアントに割り当てるIP
local ip = 192.168.11.200 ; * Our local IP to use <---VPNサーバのIPアドレス
length bit = yes
require chap = yes
refuse pap = yes
require authentication = yes
name = VPN
ppp debug = yes
pppoptfile = /etc/ppp/options.l2tpd.lns
***/etc/ppp/options.l2tpd.lns ・・・新規作成
asyncmap 0
auth
local
crtscts
debug
lock
proxyarp
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
logfile /var/log/xl2tpd.log
lcp-echo-interval 30
lcp-echo-failure 4
ms-dns 8.8.8.8 # GoogleのDNSサーバ
ms-dns 8.8.4.4 # GoogleのDNSサーバ
本ファイルの設定内容は、「man pppd」で参照できる。
ms-dnsはクライアントがWindowsのためのオプションのようだが、これを指定しないとVPN接続後にクライアント(今回はAndroidのスマホでためした)がDNSサーバが設定されておらず、ホスト名指定でインターネットに出られなかった。
また、この設定の有無にかかわらず、VPNサーバ上ではDNSによるアドレス解決ができなかった。digコマンドに明示的に外部のDNSサーバのIPを指定してもだめで、+vcをつけて、UDPではなくTCPで外部のDNSサーバを引きにいくと、うまく引ける。なお、内部のDNSサーバでは+vcをつけてもだめだった。原因不明だが、実害はないので無視している。
***/etc/ppp/chap-secrets ・・・既存修正
"ユーザー名" * "パスワード" *
**カーネルパラメータの設定
***/etc/sysctl.conf
net.ipv4.ip_forward=1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.eth0.accept_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
net.ipv4.conf.lo.accept_redirects = 0
net.ipv4.conf.lo.send_redirects = 0
**ブロードバンドルータの設定
ブロードバンドルータはインターネット側からのパケットが許可されていないのと、NAPTでIPアドレスとポート変換が必要なので、以下のポートを開放し、VPNサーバの同ポートへ転送されるようにした。
|プロトコル|ポート番号|用途|
|UDP|500|ISAKMP|
|UDP|4500|IPsec NAT Traversal|
**VPNサーバのファイアウォール設定
***ポートの開放
Ubuntuなので、ufwコマンドを使って以下のポートを許可した。
$ sudo ufw allow 500/udp <--- ISAKMP
$ sudo ufw allow 4500/udp <--- IPsec NAT Traversal
$ sudo ufw allow 1701/udp <--- L2TP
$ sudo ufw allow to 192.168.11.200 proto esp <--- VPNサーバ向けのESP
***VPNクライアントがインターネットに出られるようにする設定
/etc/default/ufwのDEFAULT_FORWARD_POLICYをACCEPTにする。
/etc/ufw/before.rulesの最後にあるCOMMITの前に以下を追加。
-A INPUT -p udp -m policy --dir in --pol ipsec -m udp --dport l2tp -j ACCEPT
-A INPUT -p udp -m udp --dport l2tp -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -p udp -m policy --dir out --pol ipsec -m udp --sport l2tp -j ACCEPT
-A OUTPUT -p udp -m udp --sport l2tp -j REJECT --reject-with icmp-port-unreachable
COMMITの後に以下を追加
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 192.168.11.0/24 -j MASQUERADE <--- クライアントのネットワークを指定
COMMIT
以上の設定で、AndroidのスマホからVPNで接続できた。
スマホから家のPCにリモートアクセスしたく、ためしにVM上のLinuxを使ってL2TP/IPescのVPN環境を構築してみた。
環境
|No|分類|ソフト|
|01|OS|Ubuntu Server13.04(VirtualBox上のVM)|
|02|IPsec|Openswan|
|03|L2TP|xl2tpd|
** Openswan、xl2tpdのインストール
以下のコマンドでインストールする。
途中X.509証明書を使うか聞かれるが、今回は使わないのでNoにした。
$ sudo apt-get install openswan xl2tpd
** IPsecの設定
以下のファイルに以下を設定。
*** /etc/ipsec.conf ・・・既存を修正
version 2.0 # conforms to second version of ipsec.conf specification
config setup
dumpdir=/var/run/pluto/
nat_traversal=yes
virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:25.0.0.0/8,%v6:fd00::/8,%v6:fe80::/10
oe=off
protostack=netkey
include /etc/ipsec.d/l2tp-psk.conf
***/etc/ipsec.d/l2tp-psk.conf ・・・ipsec.confからinclude 新規作成
conn L2TP-PSK-NAT
rightsubnet=0.0.0.0/0
forceencaps=yes
also=L2TP-PSK-noNAT
conn L2TP-PSK-noNAT
authby=secret
pfs=no
auto=add
keyingtries=3
rekey=no
dpddelay=5
dpdtimeout=30
dpdaction=clear
ikelifetime=8h
keylife=1h
type=transport
left=192.168.11.200 <---VPNサーバのIPアドレス
leftnexthop=%defaultroute
leftprotoport=17/%any
right=%any
rightprotoport=17/%any
***/var/lib/openswan/ipsec.secrets.inc ・・・/etc/ipsec.secretsからincluse 新規作成
: PSK "事前共有鍵(任意の文字列)"
** L2TPの設定
以下のファイルに以下を設定。
***/etc/xl2tpd/xl2tpd.conf ・・・既存修正
[global] ; Global parameters:
[lns default] ; Our fallthrough LNS definition
ip range = 192.168.11.100-192.168.11.103 ; * Allocate from this IP range <--VPNクライアントに割り当てるIP
local ip = 192.168.11.200 ; * Our local IP to use <---VPNサーバのIPアドレス
length bit = yes
require chap = yes
refuse pap = yes
require authentication = yes
name = VPN
ppp debug = yes
pppoptfile = /etc/ppp/options.l2tpd.lns
***/etc/ppp/options.l2tpd.lns ・・・新規作成
asyncmap 0
auth
local
crtscts
debug
lock
proxyarp
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
logfile /var/log/xl2tpd.log
lcp-echo-interval 30
lcp-echo-failure 4
ms-dns 8.8.8.8 # GoogleのDNSサーバ
ms-dns 8.8.4.4 # GoogleのDNSサーバ
本ファイルの設定内容は、「man pppd」で参照できる。
ms-dnsはクライアントがWindowsのためのオプションのようだが、これを指定しないとVPN接続後にクライアント(今回はAndroidのスマホでためした)がDNSサーバが設定されておらず、ホスト名指定でインターネットに出られなかった。
また、この設定の有無にかかわらず、VPNサーバ上ではDNSによるアドレス解決ができなかった。digコマンドに明示的に外部のDNSサーバのIPを指定してもだめで、+vcをつけて、UDPではなくTCPで外部のDNSサーバを引きにいくと、うまく引ける。なお、内部のDNSサーバでは+vcをつけてもだめだった。原因不明だが、実害はないので無視している。
***/etc/ppp/chap-secrets ・・・既存修正
"ユーザー名" * "パスワード" *
**カーネルパラメータの設定
***/etc/sysctl.conf
net.ipv4.ip_forward=1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.eth0.accept_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
net.ipv4.conf.lo.accept_redirects = 0
net.ipv4.conf.lo.send_redirects = 0
**ブロードバンドルータの設定
ブロードバンドルータはインターネット側からのパケットが許可されていないのと、NAPTでIPアドレスとポート変換が必要なので、以下のポートを開放し、VPNサーバの同ポートへ転送されるようにした。
|プロトコル|ポート番号|用途|
|UDP|500|ISAKMP|
|UDP|4500|IPsec NAT Traversal|
**VPNサーバのファイアウォール設定
最初はファイアウォールを無効にしていたが、それは危険ということで設定してみた。
ただし、意味はよくわかっておらず、以下のページを参考に設定してみただけ。勉強しないと・・・
○○的な気まぐれ日記 http://mercurial.secret.jp/Whimsical_diary/archives/528
***ポートの開放
Ubuntuなので、ufwコマンドを使って以下のポートを許可した。
$ sudo ufw allow 500/udp <--- ISAKMP
$ sudo ufw allow 4500/udp <--- IPsec NAT Traversal
$ sudo ufw allow 1701/udp <--- L2TP
$ sudo ufw allow to 192.168.11.200 proto esp <--- VPNサーバ向けのESP
***VPNクライアントがインターネットに出られるようにする設定
/etc/default/ufwのDEFAULT_FORWARD_POLICYをACCEPTにする。
/etc/ufw/before.rulesの最後にあるCOMMITの前に以下を追加。
-A INPUT -p udp -m policy --dir in --pol ipsec -m udp --dport l2tp -j ACCEPT
-A INPUT -p udp -m udp --dport l2tp -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -p udp -m policy --dir out --pol ipsec -m udp --sport l2tp -j ACCEPT
-A OUTPUT -p udp -m udp --sport l2tp -j REJECT --reject-with icmp-port-unreachable
COMMITの後に以下を追加
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 192.168.11.0/24 -j MASQUERADE <--- クライアントのネットワークを指定
COMMIT
以上の設定で、AndroidのスマホからVPNで接続できた。