ローカルエリアネットワーク

弊社には、さまざまなデータセンターや都市にあるサーバーのグループがあります。 現時点では、6つのデータセンターを使用しています。 大多数のサーバー間で集中的なトラフィック交換が行われ、データ交換プロトコルが常に必要なレベルの保護を提供するとは限りません。 したがって、使用可能なすべてのサーバー間に共通のローカルエリアネットワークを作成することにしました。 ルーティングを使用したOpenVPNを使用したネットワークの作成は、そのようなネットワークの過度に扱いにくいアーキテクチャのために拒否しました。 私たちの意見では、最も単純で最も便利なオプションはピアツーピアネットワークです。 さらに、ピアツーピアネットワークを作成および構成する方法について詳しく説明します。

作成するには、OpenVPNとBridge-utilsを使用します。
標準OpenVPNネットワークは、OpenVPNを備えた1つ以上のサーバーと、それらに接続するクライアントで構成されます。 OpenVPNはTCPおよびUDP接続をサポートしています。 専用サーバーにはトラフィックフィルタリングが制御されていないため、UDPプロトコルを選択することをお勧めします。さらに、UDPはより高速なプロトコルです。

最初のサーバー

最初のサーバー(実際、これはトラフィック交換ポイントです)は、標準スキームに従って構成されています。 Debianはほとんどのサーバーにインストールされているため、このOSの機能を考慮に入れて、さらなる指示が与えられます。

aptitude install openvpn openvpn-blacklist
cd / etc / openvpn /
cp -R /usr/share/openvpn/easy-rsa/2.0 / etc / openvpn / easy-rsa
mkdir / etc / openvpn /キー
chmod 750 / etc / openvpn /キー


/ etc / openvpn / easy-rsa / varsを次のように編集します。

export EASY_RSA = "/ etc / openvpn / easy-rsa"
export KEY_DIR = "/ etc / openvpn / keys"
エクスポートKEY_SIZE = 2048
エクスポートKEY_COUNTRY = "RU"
エクスポートKEY_PROVINCE = "MSK"
KEY_CITY = "Samara"をエクスポートします
export KEY_ORG = "Regtime Ltd."
export KEY_EMAIL = "support@regtime.net"


さらに、同じスキームに従って、キーを準備します。

cd / etc / openvpn / easy-rsa
。 ./vars
./clean-all
./build-ca
./build-key-server servername
./build-dh


サーバーの最小構成を/ etc / openvpn / udp-serverに作成します 。 さらに多くのパラメーターを指定できます。最適化の可能性は非常に広いです。

dev tap0
プロトUDP
ポート1194
caキー/ca.crt
証明書キー/ servername.crt
キーキー/ servername.key
dhキー/ dh2048.pem
ユーザーなし
グループnogroup
サーバー172.18.5.208 255.255.255.240
永続キー
持続する
ステータス/ dev / shm / openvpn-status-udp
動詞3
クライアント間
client-config-dir ccd-udp
log-append /var/log/openvpn-udp.log
comp-lzo
スクリプトセキュリティ2
up "/etc/init.d/lan0 start"
down /etc/init.d/lan0 stop


接続してサーバーを起動します。

ln -s udp-server udp-server.conf
/etc/init.d/openvpn start


構成の最後の3行に注意してください。 それらはピアツーピアネットワークでこのサーバーを使用することを可能にします。 これはUDPサーバーでのみ実行できることに注意してください。 スクリプト自体は次のようになります-/ etc / init.d / lan0
#!/ bin / bash

###開始情報の開始
#提供:lan0
#必須開始:$ network $ remote_fs $ syslog openvpn
#必須:$ network $ remote_fs $ syslog openvpn
#開始する必要があります:
#すべきこと:
#X-Start-Before:$ x-display-manager gdm kdm xdm wdm ldm sdm nodm
#X-Interactive:true
#デフォルト開始:2 3 4 5
#デフォルト停止:0 1 6
#簡単な説明:lan0サービス
###終了情報の終了

。 / lib / lsb / init-functions

PATH = / bin:/ sbin:/ usr / bin:/ usr / sbin

br = "lan0"
tap = "tap0"
eth = "eth1"
eth_ip = "172.18.5.2"
eth_netmask = "255.255.255.0"
eth_broadcast = "172.18.5.255"

ケース「$ 1」
開始)
brctl addbr $ br
brctl addif $ br $ eth

tで$タップ; する
brctl addif $ br $ t
やった

tで$タップ; する
ifconfig $ t 0.0.0.0 promisc up
やった

ifconfig $ eth 0.0.0.0 promisc up

ifconfig $ br $ eth_ip netmask $ eth_netmask broadcast $ eth_broadcast
;;

停止)
ifconfig $ br down
brctl delbr $ br

ifconfig $ eth $ eth_ip netmask $ eth_netmask broadcast $ eth_broadcast
;;
*)
echo "usage lan0 {start | stop}"

1番出口
;;
エサック
出口0


同じスクリプトをrc.dに使用できます。

update-rc.d lan0のデフォルト


手動開始のシーケンスは次のとおりです。

/etc/init.d/openvpn start
/etc/init.d/lan0 start
手動で停止する場合:
/etc/init.d/lan0 stop
/etc/init.d/openvpn stop


再起動時にOpenVPN lan0が再び上昇することに注意してください。 場合によっては、これは手動で行う必要があります。 たとえば、cronを使用すると、タスクは次のようになります。

[-n "` / sbin / ifconfig tap0` "] && [-z" `/ usr / sbin / brctl show | grep tap0`"] && /etc/init.d/lan0 start


サーバーの準備ができました! 次に、クライアント用のキーと証明書を作成する必要があります。

お客さま

サーバー上で、外部に接続するクライアント用の証明書を作成します。

cd / etc / openvpn / easy-rsa
。 ./vars
./build-keyクライアント


もちろん、各クライアント(ここではクライアント)の名前は一意でなければなりません。
証明書のデータを入力して確認すると、次のファイルが表示されます。

client.crt
client.csr
client.key


クライアント側では、サーバーの/ etc / openvpn / keysディレクトリから次のファイルが必要です。

ca.crt
client.key
client.crt


また、クライアント側でOpenVPNをインストールします。

aptitude install openvpn openvpn-blacklist
mkdir / etc / openvpn /キー
chmod 750 / etc / openvpn /キー


キーと証明書を/ etc / openvpn / keysにコピーします
最も簡単な/etc/openvpn/client.conf構成を作成します。
dev tap0
プロトUDP
クライアント
リモートサーバー1194
無限の解決と再試行
ノバインド
永続キー
持続する
caキー/ca.crt
証明書キー/ client.crt
キーキー/ client.key
comp-lzo
動詞3
status / dev / shm / client-status-udp
ログ/var/log/openvpn-client.log
ping 10
ping-restart 1800
スクリプトセキュリティ2
up "/etc/init.d/lan0 start"
down /etc/init.d/lan0 stop


共通のピアツーピアネットワークに接続するには、サーバーと同じlan0スクリプトが使用されます(eth_ipが正しいものに修正されます)。

多くのサーバー

ネットワークには、複数のトラフィック交換ポイントがある場合があります。 この場合、クライアントがそれらのいずれかに接続し、同じネットワークに入ることができる必要があります。 複雑なことは何もありません。 上記のように、任意の数のサーバーを構成できます。 しかし、2つのニュアンスがあります。
1.各サーバーは、個別の一意のIPアドレスを発行する必要があります。
これは、構成内の1行を置き換えることで実現されます。

サーバー172.18.5.208 255.255.255.240


2. OpenVPNサーバー間で証明書を同期する必要があります。
最も簡単な解決策は、 / etc / openvpn / keysディレクトリをssh 経由で単純にコピーすることです。 しかし、より良い方法があります-rsync。
双方向の交換には、更新のダウンロードとダウンロードの2つのスクリプトが必要です。
ダウンロード- プッシュ
#!/ bin / bash

export RSYNC_RSH = "ssh -c arcfour -o Compression = no -x -l root"

rsync --delete-after \
-zu --modify-window = 10 -aHAX --numeric-ids --sparse \
/ etc / openvpn / keysリモートホスト:/ etc / openvpn / keys

更新- ポップ
#!/ bin / bash

export RSYNC_RSH = "ssh -c arcfour -o Compression = no -x -l root"

rsync --delete-after \
-zu --modify-window = 10 -aHAX --numeric-ids --sparse \
リモートホスト:/ etc / openvpn / keys / etc / openvpn / keys


-delete-afterスイッチに注意してください。 同期後に宛先側にないファイルを削除するために使用されます。 つまり popは、リモートホスト上にないすべてをローカルで削除します。

キーの更新順序も重要です。 通常の状況では、最初の(メイン)OpenVPNサーバーで新しいキーと証明書を作成する必要があり、他のすべてのユーザーはpopを介してそこから更新を受信する必要があります。 したがって、プッシュはまったく必要ありません。 ただし、必要に応じて、任意のサーバーに新しいユーザーを追加できます。その後、最初にプッシュしてダウンロードし、他のすべてのOpenVPNサーバーでポップする必要があります。

相互作用はsshを経由するため、すべてのサーバーはrootとsshキーを交換する必要があります。 キーは次のコマンドを使用して生成できます

ssh-keygen -t rsa -b 2048


を使用してコピー

ssh-copy-idリモートホスト


これらのすべてのサーバーでルートを許可する必要があることに注意してください。 セキュリティのために、パスワード認証を無効にすることができます。 / etc / ssh / sshd_config

PermitRootLoginはい
パスワード認証


ここで、新しいクライアントを追加した後、キーが追加されたサーバーをプッシュし、他のすべてのOpenVPNサーバーでポップする必要があります。



従業員はオフィスで働く必要がない場合もありますが、ローカルネットワークにアクセスする必要があります。 これは、lan0内でも簡単に実装できます。 ただし、オペレーティングシステムとトラフィックフィルタリングの問題にはあいまいさがないため、OpenVPNでは低速でありながら気取らないTCPプロトコルを使用することをお勧めします。

構成/ etc / openvpn / tcp-server:
dev tun0
プロトtcp
ポート1194
caキー/ca.crt
証明書キー/ server.crt
キーキー/ server.key
dhキー/ dh2048.pem
ユーザーなし
グループnogroup
サーバー172.18.5.248 255.255.255.240
永続キー
持続する
ステータス/ dev / shm / openvpn-status-tcp
動詞3
クライアント間
client-config-dir ccd-tcp
「ルート172.18.5.0 255.255.255.0」を押します
log-append /var/log/openvpn-tcp.log
comp-lzo


キーと証明書は、UDPと同じ方法で準備されます。 そのような接続の設定は、さらに少し単純になります-client.ovpn

クライアント
プロトtcp
リモートサーバー1194
無限の解決と再試行
ノバインド
永続キー
持続する
ca ca.crt
cert client.crt
キーclient.key
comp-lzo


さまざまなOSのクライアントは、公式サイトopenvpn.netからダウンロードすることをお勧めします

Source: https://habr.com/ru/post/J162193/


All Articles