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アドレスが付与されるので、
同じクライアントキーを複数の端末で使い回すことはできない。
コメント