注意
osmc(raspi0w)の場合、リブート直後はtunデバイスにIPアドレスが割当されておらずサーバが使えない。openvpnをrestartすると、tunデバイスにIPアドレスが割り当てられサーバが使用可能になる。
osmc on raspi-zeroW にopenvpnを入れる
install
apt-get install -y openvpn easy-rsa
cd /etc/openvpn
mkdir easy-rsa
cd easy-rsa
cp -R /usr/share/easy-rsa/* ./
configation
/etc/openvpn/easy-rsa/vars
export EASY_RSA="/etc/openvpn/easy-rsa"
export KEY_SIZE=2048
export KEY_COUNTRY="JP"
export KEY_PROVINCE="Kanagawa"
export KEY_CITY="Yokohama"
export KEY_ORG="MyHome"
export KEY_EMAIL="mail@mymail.server"
export KEY_OU="MyOU"
CA証明書
cd /etc/openvpn/easy-rsa
cp openssl-1.0.0.cnf openssl.cnf
source ./vars
./clean-all
./build-ca
サーバ証明書
./build-key-server server
A challenge password []: (電話番号を設定)
クライアント証明書
./build-key foo
./build-key bar
challenge passwordは空白
DH(Diffie-Hellman key exchange)パラメタ
* 30〜60分かかる
./build-dh
TLS鍵を作成
cd /etc/openvpn/easy-rsa/keys
openvpn --genkey --secret ta.key
cp ta.key server.crt server.key dh2048.pem ca.crt /etc/openvpn
OpenVPNサーバの設定ファイルを作成
cd /etc/openvpn
cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz .
gunzip server.conf.gz
編集
ipv6化して、外部解放できるポートが限られているので、Listenするポート番号はHomeGWでポートフォワードしたポートに合わせる。
/etc/openvpn/server.conf
# cat server.conf | grep -v '^[#;]' | grep -v ^\s*$
---
port xxxx
proto udp
dev tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh2048.pem
server 10.8.0.0 255.255.255.0 # デフォルトのまま
ifconfig-pool-persist ipp.txt # 固定IP付与(未設定)
push "redirect-gateway def1 bypass-dhcp" # VPN-Clientからのパケットは全てVPN経由
push "dhcp-option DNS 192.168.1.1" # VPNから見て外のDNS
keepalive 10 120
tls-auth /etc/openvpn/ta.key 0 # 0:server 1:client
cipher AES-256-CBC
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
log-append /var/log/openvpn.log
explicit-exit-notify 1
systemctlで起動
systemctl restart openvpn
systemctl enable openvpn
iptablesのポートを開放
exit 0の前に2行追加。xxxxは server.conf で指定したポート。
/etc/rc.local
iptables -A INPUT -p udp -m state --state NEW -m udp --dport xxxx -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o wlan0 -j MASQUERADE
VPNサーバにするためIPフォワードを有効にします。
/etc/sysctl.conf
net.ipv4.ip_forward=1
reboot&NW構成図
Inter-net
||
|| Global-address
[ www.xxx.yyy.zzz ] IPoE-router
[ 192.168.1.1 ]
|| DNS#1
||
[ 192.168.1.254 ] Home-router
[ 192.168.0.1 ]
|| DNS#2
|| 192.168.0.0/24
++=======================(Home-NW)=========++
||
wlan0 [ 192.168.0.102 ] VPN-Server
tun0 [ 10.8.0.1 ] ip-mmasquerade
||
|| 10.8.0.0/24
++=======================(VPN-NW)==========++
||
||
[ 10.8.0.2 - ** ] VPN-Clients
lo: flags=73 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
tun0: flags=4305 mtu 1500
inet 10.8.0.1 netmask 255.255.255.255 destination 10.8.0.2
wlan0: flags=-28605 mtu 1500
inet 192.168.0.102 netmask 255.255.255.0 broadcast 192.168.0.255
受信先サイト ゲートウェイ ネットマスク フラグ Metric Ref 使用数 インタフェース
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 wlan0
10.8.0.0 10.8.0.2 255.255.255.0 UG 0 0 0 tun0
10.8.0.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0
192.168.0.1 0.0.0.0 255.255.255.255 UH 0 0 0 wlan0