---
slug: "openssl-vpn-all-member-in-segment"
title: "OpenVPN で拠点間VPNをする"
description: "Ubuntu サーバに OpenVPN をインストールし、拠点間 VPN を構築した時のメモ。"
url: "https://www.ytyng.com/blog/openssl-vpn-all-member-in-segment"
publish_date: "2018-06-29T12:58:14Z"
created: "2018-06-29T12:58:14Z"
updated: "2026-02-27T03:58:16.802Z"
categories: []
keywords: ""
featured_image_url: "https://media.ytyng.com/resize/20230812/caefd858ad8f4df39af309fd89cfe028.png.webp?width=768"
has_video: false
has_music: false
video_urls: []
music_urls: []
lang: "ja"
---

# OpenVPN で拠点間VPNをする

<h1>サーバー</h1>
<p>OpenVPN + Bridge</p>
<p>今回は、TCPで。</p>
<p></p>
<p>Ubuntu16.04LTSにOpenVPNを導入する<br /><a href="https://gtrt7.com/blog/linux/ubuntu-openvpn">https://gtrt7.com/blog/linux/ubuntu-openvpn</a></p>
<p>ここが非常に参考になった。この記事の通りに行えば問題ない。</p>
<p>server.conf はこのようになった。</p>
<pre>port 1194<br /><br />proto tcp-server<br />tcp-nodelay<br /><br />dev tap0<br /><br />ca ca.crt<br />cert server.crt<br />key server.key<br />dh dh2048.pem<br />tls-auth ta.key 0<br /><br />ifconfig-pool-persist /var/log/openvpn/ipp.txt<br /><br />server-bridge 192.168.1.50 255.255.255.0 192.168.1.20 192.168.1.49<br /><br />push "route 192.168.1.0 255.255.255.0"<br /><br />push "redirect-gateway def1 bypass-dhcp"<br /><br />client-to-client<br /><br />keepalive 10 120<br /><br />cipher AES-256-CBC<br />auth SHA512<br /><br />compress lz4-v2<br />push "compress lz4-v2"<br /><br />user nobody<br />group nogroup<br /><br />persist-key<br />persist-tun<br /><br />status /var/log/openvpn/openvpn-status.log<br /><br />log         /var/log/openvpn/openvpn.log<br />log-append  /var/log/openvpn/openvpn.log<br /><br />verb 3<br /><br />;mute 20</pre>
<p></p>
<p>起動</p>
<pre>sudo systemcctl start <a href="mailto:openvpn@server">openvpn@server</a></pre>
<p></p>
<p>このサーバで、ネットワークをブリッジ化することで、同一セグメント内と通信できる。</p>
<p>OpenVPN 2.0 Ethernet Bridging Japanese Translation<br /> https://www.gsais.kyoto-u.ac.jp/staff/liang/oss/ovpn2_ether_ja.html</p>
<p>こちらの情報を参考に、スクリプトを作成 (そのまま)</p>
<pre><span>#!/bin/bash<br /></span><span><br /></span><span>###########################################<br /></span><span># Linux上でイーサネットブリッジを起動させる<br /></span><span># 依存性: bridge-utils<br /></span><span>###########################################<br /></span><span><br /></span><span># ブリッジインタフェース<br /></span>br=<span>"br0"<br /></span><span><br /></span><span># ブリッジしたいTAPインタフェースのリスト<br /></span><span># 例えば tap="tap0 tap1 tap2"<br /></span>tap=<span>"tap0"<br /></span><span><br /></span><span># 上記のTAPインタフェースとブリッジしたい物理イーサネットインタフェース<br /></span>eth=<span>"enp2s0"<br /></span>eth_ip=<span>"192.168.1.50"<br /></span>eth_netmask=<span>"255.255.255.0"<br /></span>eth_broadcast=<span>"192.168.1.255"<br /></span>gw=<span>"192.168.1.1"<br /></span><span><br /></span><span><br /></span><span>for </span>t <span>in </span>$tap; <span>do<br /></span><span>    </span>openvpn --mktun --dev $t<br /><span>done<br /></span><span><br /></span>brctl addbr $br<br />brctl addif $br $eth<br /><br /><span>for </span>t <span>in </span>$tap; <span>do<br /></span><span>    </span>brctl addif $br $t<br /><span>done<br /></span><span><br /></span>sleep <span>1<br /></span><span><br /></span><span>for </span>t <span>in </span>$tap; <span>do<br /></span><span>    </span>ifconfig $t 0.0.0.0 promisc up<br /><span>done<br /></span><span><br /></span>sleep <span>1<br /></span><span><br /></span>ifconfig $eth 0.0.0.0 promisc up<br /><br />ifconfig $br $eth_ip netmask $eth_netmask broadcast $eth_broadcast<br /><br />route add default gw $gw</pre>
<p></p>
<p>サーバ側ができたら、Mac のクライアントをインストールして動作を確認してみる</p>
<p>Tunnelblick | Free open source OpenVPN VPN client server software for Mac OS X and macOS<br /><a href="https://tunnelblick.net/">https://tunnelblick.net/</a></p>
<p></p>
<h1>クライアントルーター</h1>
<p>クライアント側のセグメントの全員がアクセスできるよう、クライアントをNATでルーター化する。</p>
<p>クライアントの設定ファイル</p>
<p>/etc/openvpn/client.conf として保存</p>
<pre>client<br /><br />dev tap0<br />proto tcp<br /><br />remote openvpn.example.com 1194<br /><br />resolv-retry infinite<br />nobind<br /><br />persist-key<br />persist-tun<br /><br />ca ca.crt<br />cert my-client.crt<br />key my-client.key<br />tls-auth ta.key 1<br />cipher AES-256-CBC<br />auth SHA512<br /><br />compress lz4-v2<br /><br />verb 3</pre>
<p></p>
<p>起動</p>
<pre>sudo systemcctl start <a href="mailto:openvpn@server">openvpn@server</a></pre>
<p></p>
<p>起動できたら、起動しているマシンで疎通確認する。</p>
<p></p>
<p>その後、iptables でルーター化</p>
<p>Ubuntu 16.04 でルータつくる - Qiita<br /><a href="https://qiita.com/nanbuwks/items/fe8145fc8b989be9d427">https://qiita.com/nanbuwks/items/fe8145fc8b989be9d427</a></p>
<p>この記事が参考になった。</p>
<pre>net.ipv4.ip_forward=1</pre>
<p>してから</p>
<p></p>
<pre>sudo iptables -t nat -F
sudo iptables -F
sudo iptables -L</pre>
<pre>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</pre>
<p></p>
<p>これで、OpenVPN サーバへのルータが完成。</p>
<p>あとは、クライアント拠点の静的ルーティングで</p>
<p>192.168.1.0/24 宛のパケットをすべて、ルータ機へルーティングする。</p>
<p>そうすると、拠点内の全員が設定なしでVPNを使うことができる。</p>
<p></p>
<p>1つのクライアントキーに対して1つのIPアドレスが付与されるので、</p>
<p>同じクライアントキーを複数の端末で使い回すことはできない。</p>
<p></p>
<p></p>
<p></p>
<p></p>
<p></p>
<p></p>
<p></p>
<p></p>
<p></p>
<p></p>
<p></p>
<p></p>
<p></p>
<p></p>
<p></p>
