OpenSSL で拠点間VPNをする

(コメント)

サーバー

OpenVPN + Bridge

今回は、TCPで。

Ubuntu16.04LTSにOpenVPNを導入する
https://gtrt7.com/blog/linux/ubuntu-openvpn

ここが非常に参考になった。この記事の通りに行えば問題ない。

server.conf はこのようになった。

port 1194

proto tcp-server
tcp-nodelay

dev tap0

ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
tls-auth ta.key 0

ifconfig-pool-persist /var/log/openvpn/ipp.txt

server-bridge 192.168.1.50 255.255.255.0 192.168.1.20 192.168.1.49

push "route 192.168.1.0 255.255.255.0"

push "redirect-gateway def1 bypass-dhcp"

client-to-client

keepalive 10 120

cipher AES-256-CBC
auth SHA512

compress lz4-v2
push "compress lz4-v2"

user nobody
group nogroup

persist-key
persist-tun

status /var/log/openvpn/openvpn-status.log

log /var/log/openvpn/openvpn.log
log-append /var/log/openvpn/openvpn.log

verb 3

;mute 20

起動

sudo systemcctl start openvpn@server

このサーバで、ネットワークをブリッジ化することで、同一セグメント内と通信できる。

OpenVPN 2.0 Ethernet Bridging Japanese Translation
https://www.gsais.kyoto-u.ac.jp/staff/liang/oss/ovpn2_ether_ja.html

こちらの情報を参考に、スクリプトを作成 (そのまま)

#!/bin/bash

###########################################
# Linux上でイーサネットブリッジを起動させる
# 依存性: bridge-utils
###########################################

# ブリッジインタフェース
br="br0"

# ブリッジしたいTAPインタフェースのリスト
# 例えば tap="tap0 tap1 tap2"
tap="tap0"

# 上記のTAPインタフェースとブリッジしたい物理イーサネットインタフェース
eth="enp2s0"
eth_ip="192.168.1.50"
eth_netmask="255.255.255.0"
eth_broadcast="192.168.1.255"
gw="192.168.1.1"


for t in $tap; do
openvpn --mktun --dev $t
done

brctl addbr $br
brctl addif $br $eth

for t in $tap; do
brctl addif $br $t
done

sleep 1

for t in $tap; do
ifconfig $t 0.0.0.0 promisc up
done

sleep 1

ifconfig $eth 0.0.0.0 promisc up

ifconfig $br $eth_ip netmask $eth_netmask broadcast $eth_broadcast

route add default gw $gw

サーバ側ができたら、Mac のクライアントをインストールして動作を確認してみる

Tunnelblick | Free open source OpenVPN VPN client server software for Mac OS X and macOS
https://tunnelblick.net/

クライアントルーター

クライアント側のセグメントの全員がアクセスできるよう、クライアントをNATでルーター化する。

クライアントの設定ファイル

/etc/openvpn/client.conf として保存

client

dev tap0
proto tcp

remote openvpn.example.com 1194

resolv-retry infinite
nobind

persist-key
persist-tun

ca ca.crt
cert my-client.crt
key my-client.key
tls-auth ta.key 1
cipher AES-256-CBC
auth SHA512

compress lz4-v2

verb 3

起動

sudo systemcctl start openvpn@server

起動できたら、起動しているマシンで疎通確認する。

その後、iptables でルーター化

Ubuntu 16.04 でルータつくる - Qiita
https://qiita.com/nanbuwks/items/fe8145fc8b989be9d427

この記事が参考になった。

net.ipv4.ip_forward=1

してから

sudo iptables -t nat -F
sudo iptables -F
sudo iptables -L
sudo iptables -t nat -A POSTROUTING -o tap0 -j MASQUERADE
sudo  iptables -A FORWARD -i tap0 -o enp0s1 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo  iptables -A FORWARD -i enp0s1 -o tap0 -j ACCEPT

これで、OpenVPN サーバへのルータが完成。

あとは、クライアント拠点の静的ルーティングで

192.168.1.0/24 宛のパケットをすべて、ルータ機へルーティングする。

そうすると、拠点内の全員が設定なしでVPNを使うことができる。

1つのクライアントキーに対して1つのIPアドレスが付与されるので、

同じクライアントキーを複数の端末で使い回すことはできない。

現在未評価

コメント

最近のツイート

  • ytyng

    ytyng @ytyng

    俺もスタバアプリにログインできないよ
    1 ヶ月, 1 週間 前

  • 安藤拓郎 Takuro Ando

    安藤拓郎 Takuro Ando @takuroando

    ytyng

    これまでいろんなグッズを作ってきたけど、今回は「お米」と聞いて買うしかないなと。今夜の夕食はコシヒカリ!箸もセットだし^^ https://t.co/01ucQx9qtw #腰乃展 #マンガ展 https://t.co/4VL2vOe0Og
    1 ヶ月, 3 週間 前

  • ytyng

    ytyng @ytyng

    講談社さんとやった全部入り電子書籍セットがギネスブックに登録されたよー https://t.co/rbkd3IYub0
    1 ヶ月, 3 週間 前