Edited at

raspi-zeroW にopenvpnを入れる


osmc on raspi-zeroW にopenvpnを入れる

2019/06/08、内部NWへのアクセスを追加

参考1

参考2

CentOS


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