OpenVPN で拠点間VPNをする

投稿者: ytyng 5年, 9ヶ月 前

サーバー

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アドレスが付与されるので、

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

現在未評価

コメント

アーカイブ

2024
2023
2022
2021
2020
2019
2018
2017
2016
2015
2014
2013
2012
2011