Home > スポンサー広告 > RaspberryPiをVPNサーバ@L2TP/IPsecにしよう (1)

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Comments:-

Comment Form

Trackback+Pingback:-

TrackBack URL for this entry
http://hogeho.blog63.fc2.com/tb.php/129-d28f71ea
Listed below are links to weblogs that reference
スポンサーサイト from 徒然なるままに。サハラ砂漠で大絶叫 第二部

Home > スポンサー広告 > RaspberryPiをVPNサーバ@L2TP/IPsecにしよう (1)

Home > メモ > RaspberryPiをVPNサーバ@L2TP/IPsecにしよう (1)

RaspberryPiをVPNサーバ@L2TP/IPsecにしよう (1)

今回はちょっと技術ネタ。RaspberryPiをVPNサーバにしよう、というお話。

GPIOでいろいろ遊ぶのを目的に買ったラスパイなんですが、よく考えたらXBee使ったほうが色々便利っぽいので、宙に浮いた感じになってしまいました。んで、このまま遊ばせておくのももったいないので、VPNサーバにしちゃいました。

一般家庭でVPNというとPPTPなんかがよく利用されていますが、さすがに脆弱性が問題になってるようなものを新たに設置しようというのもアレなので、L2TP/IPsecでやってます。

構成するネットワークについては、下の図のようにしました。
ネットワーク構成図
この構成ですと、VPNで接続してきたクライアントが自宅LAN内と同一セグメント内に入るようになります。
LAN内へのアクセスにルーティングテーブルを書き換える必要がないので、外出先から自宅LANにアクセスするにはこれが最も簡単だと思います。

手順は以下の通りです。
1.xl2tpdとopenswanを落としてくる
2.apt-getで環境を整える
3.それぞれmake&make install
4.各種設定
5.証明書の発行とインストール
6.テスト

1.xl2tpdとopenswanを落としてくる


まんまですが。ディレクトリを作成して、そこに落としておきます。

$ mkdir ipsec
$ cd ipsec
$ wget http://ftp.openswan.org/xl2tpd/xl2tpd-1.3.1.tar.gz
$ wget http://ftp.openswan.org/openswan/openswan-2.6.38.tar.gz


2.apt-getで環境を整える


まずビルドに
・make
・gcc
が必要になります。
あとxl2tpdをビルドして動かすのに
・libpcap のヘッダーとライブラリ
・ppp
・daemon
・initscripts
の4つが必要です。
さらにopenswanには
・gmp のヘッダーとライブラリ
・bison
・flex
・lsof
が必要になります。
というわけで、まとめて apt-get します。

$ sudo apt-get install make gcc libpcap-dev ppp daemon initscripts libgmp-dev bison flex isof


3.それぞれをインストール


まずxl2tpdから

$ tar zxvf xl2tpd-1.3.1.tar.gz
$ cd xl2tpd-1.3.1
$ make
$ sudo make install
$ cd ../

続いてopenswanを

$ tar zxvf openswan-2.6.38.tar.gz
$ cd openswan-2.6.38
$ make programs
$ sudo make install
$ cd ../


4.各種設定


設定ファイルをコピーしたり書き換えたりします。
まずxl2tpdのサービスファイルをコピーして、実行権限を割り当てます。

$ sudo cp xl2tpd-1.3.1/packaging/fedora/xl2tpd.init /etc/init.d/xl2tpd
$ sudo chmod 755 /etc/init.d/xl2tpd

ラスパイではこのままだと動かないので、少し書き換えます。

#!/bin/sh
#
# xl2tpd This shell script takes care of starting and stopping l2tpd.
#
# chkconfig: - 80 30
# description: Layer 2 Tunnelling Protocol Daemon (RFC 2661)
#
# processname: /usr/sbin/xl2tpd
# config: /etc/xl2tpd/xl2tpd.conf
# pidfile: /var/run/xl2tpd.pid

### BEGIN INIT INFO
# Provides: xl2tpd
# Required-Start: $local_fs $network $syslog
# Required-Stop: $local_fs $network $syslog
# Default-Start:
# Default-Stop: 0 1 2 3 4 5 6
# Short-Description: start|stop|status|restart|try-restart|reload|force-reload xl2tpd server
# Description: control xl2tpd server
### END INIT INFO

#Servicename
SERVICE=xl2tpd

# Source function library.
. /lib/lsb/init-functions

# Source networking configuration.
# . /etc/sysconfig/network

# if [ ${NETWORKING} = "no" ]
# then
# exit 0
# fi

[ -x /usr/sbin/$SERVICE ] || exit 0

RETVAL=0

start() {
echo -n "Starting $SERVICE: "
if [ ! -d /var/run/xl2tpd ]
then
mkdir /var/run/xl2tpd
fi
daemon /usr/sbin/$SERVICE
RETVAL=$?
echo
if [ $RETVAL -eq 0 ];then
touch /var/lock/subsys/$SERVICE
else
exit 7;
fi
return 0;
}

stop() {
echo -n "Stopping $SERVICE: "
killproc /usr/sbin/$SERVICE
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
rm -f /var/run/xl2tpd/$SERVICE
rm -f /var/lock/subsys/$SERVICE
fi
echo
return $RETVAL
}

restart() {
stop
start
}

# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status $SERVICE
RETVAL=$?
;;
restart|reload)
restart
;;
condrestart)
[ -f /var/lock/subsys/$SERVICE ] && restart || :
;;
*)
echo "Usage: $SERVICE {start|stop|status|restart|reload|condrestart}"
exit 1
esac

…こんな感じで。
あと実行ファイルのパスがちょっと違うのでシンボリックリンクを作成しておきます。

$ sudo ln -s /usr/local/sbin/xl2tpd /usr/sbin/xl2tpd

※initファイルを書き換えているので、別にinitファイルの中のパスを書き換えでもいいと思います。

さらに、xl2tpdの設定ファイル類をコピーしておきます。

$ sudo mkdir /etc/xl2tpd
$ sudo cp xl2tpd-1.3.1/examples/xl2tpd.conf /etc/xl2tpd/
$ sudo cp xl2tpd-1.3.1/examples/ppp-options.xl2tpd /etc/ppp/options.xl2tpd

ここまできたら、とりあえず動かしてみます。

$ sudo service xl2tpd start

ここで

Starting xl2tpd: [OK]

と表示されればおっけー。
ついでにnetstatでポートが開いてるか確認します。L2TPのポートは UDP の 1701 です。

$ netstat -an | grep 1701

これで

udp 0 0 0.0.0.0:1701 0.0.0.0:*

とか表示されれば大丈夫です。
おっけーなら、サービスを停止します。

$ sudo service xl2tpd stop


続いてOpenSwanのほうですが、基本的な設定ファイル等はインストール時点で配置されているので、このままサービスを実行します。

$ sudo service ipsec start

ここで、

Starting ipsec: [OK]

と表示されるかもしれませんが、まだ安心しないでください。
ベリファイコマンドでちゃんと動作が可能かを確認します。

$ sudo ipsec verify

[DISABLED]と表示される項目がいくつか出てくると思いますので、sysctl.confを書き換えてこれらが[OK]となるようにします。
内容としては、ipv4のフォワーディング(ラスパイ内でのルーティング機能)を有効にして、ネットワークアダプタの送受信のリダイレクトを無効にします。

#
# /etc/sysctl.conf - Configuration file for setting system variables
# See /etc/sysctl.d/ for additonal system variables
# See sysctl.conf (5) for information.
#

#kernel.domainname = example.com

# Uncomment the following to stop low-level messages on console
kernel.printk = 3 4 1 3

##############################################################3
# Functions previously found in netbase
#

# Uncomment the next two lines to enable Spoof protection (reverse-path filter)
# Turn on Source Address Verification in all interfaces to
# prevent some spoofing attacks
#net.ipv4.conf.default.rp_filter=1
#net.ipv4.conf.all.rp_filter=1

# Uncomment the next line to enable TCP/IP SYN cookies
# See http://lwn.net/Articles/277146/
# Note: This may impact IPv6 TCP sessions too
#net.ipv4.tcp_syncookies=1

# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

# Uncomment the next line to enable packet forwarding for IPv6
# Enabling this option disables Stateless Address Autoconfiguration
# based on Router Advertisements for this host
#net.ipv6.conf.all.forwarding=1


###################################################################
# Additional settings - these settings can improve the network
# security of the host and prevent against some network attacks
# including spoofing attacks and man in the middle attacks through
# redirection. Some network environments, however, require that these
# settings are disabled so review and enable them as needed.
#
# Do not accept ICMP redirects (prevent MITM attacks)
net.ipv4.conf.eth0.accept_redirects = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.lo.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
#net.ipv6.conf.all.accept_redirects = 0
_
# Accept ICMP redirects only for gateways listed in our default
# gateway list (enabled by default)
# net.ipv4.conf.all.secure_redirects = 1
#
# Do not send ICMP redirects (we are not a router)
net.ipv4.conf.eth0.send_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.lo.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

#
# Do not accept IP source route packets (we are not a router)
#net.ipv4.conf.all.accept_source_route = 0
#net.ipv6.conf.all.accept_source_route = 0
#
# Log Martian Packets
#net.ipv4.conf.all.log_martians = 1
#

# rpi tweaks
vm.swappiness=1
vm.min_free_kbytes = 8192


こんな感じになりました。
USB-LANなどを使用してLANアダプターが増えている場合は、それらのリダイレクトも無効になるように書き換えてください。

書き換えたら

$ sudo sysctl -p

で変更内容を適用します。
変更したら改めてベリファイコマンドで確認します。

$ sudo ipsec verify
Checking your system to see if IPsec got installed and started correctly:
Version check and ipsec on-path [OK]
Linux Openswan U2.6.38/K3.2.27+ (netkey)
Checking for IPsec support in kernel [OK]
SAref kernel support [N/A]
NETKEY: Testing XFRM related proc values [OK]
[OK]
[OK]
Checking that pluto is running [OK]
Pluto listening for IKE on udp 500 [OK]
Pluto listening for NAT-T on udp 4500 [OK]
Checking for 'ip' command [OK]
Checking /bin/sh is not /bin/dash [WARNING]
Checking for 'iptables' command [OK]
Opportunistic Encryption Support [DISABLED]

こんな感じになればおっけー。

出来たら一旦openswanのサービスを止めます。

$ service ipsec stop

長くなってきたので続きは後ほど。
スポンサーサイト

Comments:0

Comment Form

Trackback+Pingback:0

TrackBack URL for this entry
http://hogeho.blog63.fc2.com/tb.php/129-d28f71ea
Listed below are links to weblogs that reference
RaspberryPiをVPNサーバ@L2TP/IPsecにしよう (1) from 徒然なるままに。サハラ砂漠で大絶叫 第二部

Home > メモ > RaspberryPiをVPNサーバ@L2TP/IPsecにしよう (1)

お勧め動画

カウンター

Recent Comments
Recent Trackback
Search
Meta
Links
Feeds

Page Top

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。