質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.83%
VPN

VPN(Virtual Private Network)は、仮想プライベートネットワークとも呼ばれ、インターネットに接続してるユーザー間に仮想的な通信トンネルを構築した組織内ネットワークです。認証や暗号化を用いて通信経路を保護し安全なネットワークの構築ができます。

OpenVPN

OpenVPNは、暗号化してサーバ間を繋ぐVPNソフトウェア。OSSで開発されており、負荷分散やフェイルオーバー、もしくは細かなアクセス権設定の実装もできます。様々なOSに移植され、各OS上での利用が可能です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

Q&A

解決済

OpenVPNサーバーを2つ繋げて接続したい

slemntqe
slemntqe

総合スコア120

VPN

VPN(Virtual Private Network)は、仮想プライベートネットワークとも呼ばれ、インターネットに接続してるユーザー間に仮想的な通信トンネルを構築した組織内ネットワークです。認証や暗号化を用いて通信経路を保護し安全なネットワークの構築ができます。

OpenVPN

OpenVPNは、暗号化してサーバ間を繋ぐVPNソフトウェア。OSSで開発されており、負荷分散やフェイルオーバー、もしくは細かなアクセス権設定の実装もできます。様々なOSに移植され、各OS上での利用が可能です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

2回答

0グッド

1クリップ

619閲覧

投稿2023/02/19 10:47

編集2023/02/21 03:10

実現したいこと

OpenVPNサーバーを2つ繋げて接続したいです。

前提

現在、図の通りの構成になっています。
①、②、③は全て異なるネットワークです。

①について

  • 「②のOpenVPNサーバー」に接続する為のクライアントPCです。
  • OpenVPNに対応している様々な環境が想定されます。(WindowsやLinuxやmacOSやAndroidやiOSなど)
  • 同時に複数の①が②に対して接続します。

②について

  • 「③のOpenVPNサーバー」に接続するためのサーバーです。
  • OpenVPNサーバーとOpenVPNクライアントの2つのソフトウェアがインストールされています。
  • 実際はeth0にグローバルIPアドレスが割り当てられています。説明の都合上10.2.0.2として質問しました。

③について

  • インターネットへの出口となるOpenVPNサーバーです。
  • 実際はeth0にグローバルIPアドレスが割り当てられています。説明の都合上10.1.0.2として質問しました。

発生している問題

①が②に対してVPN接続後にインターネットに接続できません

試したこと

①が③に対してVPN接続後にインターネットに接続出来るかテストする

問題なくインターネットに接続できた
(Webブラウザで http://example.com の表示に成功した)

①のVPN接続確立後の環境を確認した

10.8.0.1が見えているがその先に接続できていない事がわかった。
(これに対する対処方法は不明でした…)

> tracert 10.8.0.1 1 13 ms 13 ms 15 ms 10.8.0.1 トレースを完了しました。 > tracert 8.8.8.8 1 13 ms 13 ms 13 ms 10.8.0.1 2 * * * 要求がタイムアウトしました。 > tracert 10.7.0.1 1 14 ms 15 ms 13 ms 10.8.0.1 2 * * * 要求がタイムアウトしました。

②が③とのVPN接続確立後、②でcurlコマンドを実行した

③のIPアドレスが表示された。期待通りの結果である。
②が③を経由してインターネットに接続出来ている事がわかる。

# curl http://api.ipify.org/ x.x.x.x

②のVPN接続確立後の環境の確認を確認した

確認したが、問題点が把握できなかった。

# ip rule show 0: from all lookup local 32766: from all lookup main 32767: from all lookup default
# ip --color=auto route show table main 0.0.0.0/1 via 10.7.0.1 dev tun0 default via 172.105.229.1 dev eth0 proto static 10.7.0.0/24 via 10.7.0.1 dev tun0 10.8.0.0/24 dev tun1 proto kernel scope link src 10.8.0.1 128.0.0.0/1 via 10.7.0.1 dev tun0 y.y.y.y via 172.105.229.1 dev eth0 ★1

★1は以下URLを参考にして追加したものです。
y.y.y.yは①のグローバルIPアドレスです。
これを追加しない場合①が②に接続出来ませんでした。
https://teratail.com/questions/58595

OpenVPNサーバーの設定変更

以下URLを参考に②と③のOpenVPNサーバーの設定を変更したが、期待する結果は得られなかった。
(①が②と③を経由した状態でのインターネットの接続に失敗した)
https://serverfault.com/questions/137981/trying-to-route-between-two-openvpn-clients

②のサーバー
/etc/openvpn/server.conf

diff

1+ server 10.8.0.0 255.255.255.0 2+ topology subnet 3+ client-to-client

③のサーバー
/etc/openvpn/server.conf

diff

1+ server 10.7.0.0 255.255.255.0 2+ topology subnet 3+ client-to-client

②のルーティングを変更した

以下URLを参考に設定を追加しました。
https://teratail.com/questions/43147

結果、インターネットの接続に成功しました。
しかし、①のWebブラウザで次のURLを表示させると②のグローバルIPアドレスが表示されました。
http://api.ipify.org/
①は②を経由しているが、③は経由していないという結果になった。

ip rule add from 10.8.0.0/24 table 1 ip route add table 1 default via 10.2.0.1 dev eth0

IPv4転送の設定を行った

②と③で設定を行いました。
結果は変化なしです。期待する結果を得られなかった。
/etc/sysctl.conf

diff

1+ net.ipv4.ip_forward=1
sysctl -w net.ipv4.ip_forward=1 sysctl -p reboot -f

③のIPアドレス範囲を②と同じにした

10.7.0.0/24から10.8.0.0/24に変更しました。
(異なるネットワークが原因で接続できていないと考えたので同じにしてみました)
結果は悪化しました。そもそも②と③のVPN接続が出来なくなってしまいました。

①のファイアウォール設定を無効化した

①のWindows側の設定に問題があるかと思い、ファイアウォール設定を無効化しました。
結果は変化なしです。期待する結果を得られなかった。

クライアント側OpenVPNを更新した

以下フォーラムで「OpenVPNクライアントを更新すると治った」と書かれていました。
https://forums.openvpn.net/viewtopic.php?t=24872
実際に私の環境でも更新してみました。
結果は変化なしです。期待する結果を得られなかった。
イメージ説明

補足情報(FW/ツールのバージョンなど)

  • Ubuntu 22.04 LTS
  • OpenVPN Server 2.5.5

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答2

7

ベストアンサー

②→③は問題ない(②→③経由でインターネットにアクセスできる)のですよね?

以下の条件を満たせば①→②→③経由でインターネットにアクセスできると思います。

  • (A) ①→②に接続後、①のルーティングで 0.0.0.0/1, 128.0.0.0/1 宛が②に向いていること。
  • (B) ②で ip_forward が有効であること。
  • (C) ②で tun0 から外向きの通信で IPマスカレードが有効であること。

(A)は、②の OpenVPNサーバー設定で push "redirect-gateway def1 bypass-dhcp" が設定されていればいいはずです。
(B)は設定済み。
(C)は firewalld を使っているのか、そうではなく nftables, iptables を直接使っているのかによって、設定手順が変わります。

投稿2023/02/20 08:21

TaichiYanagiya

総合スコア12059

slemntqe😄を押しています
slemntqe👍を押しています
slemntqe❤️を押しています
slemntqe😍を押しています
slemntqe👏を押しています
slemntqe🎉を押しています
slemntqeを押しています

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

slemntqe

2023/02/20 14:10 編集

(A)は/etc/openvpn/server.confに`push "redirect-gateway def1 bypass-dhcp" `を設定済みでした。 また、Windowsで②にVPS接続後のroute showコマンドの出力も以下画像の通りになっており、問題ないようにみえます。 https://ddjkaamml8q8x.cloudfront.net/questions/2023-02-20/c825f3af-4099-49aa-be31-66131cc0755b.png (C)はufwを利用しています。以下コマンドを実行しましたが期待する結果を得られませんでした。 vim /etc/ufw/before.rules ファイル末尾に以下を追記 ``` *nat -F :POSTROUTING ACCEPT [0:0] -A POSTROUTING -s 0.0.0.0/0 -o tun0 -j MASQUERADE COMMIT ``` ufw の動作状況を確認しましたが、動作済みでした。 https://ddjkaamml8q8x.cloudfront.net/questions/2023-02-20/cb9f0614-0e86-46cf-b546-4abe70cc8e89.png IPマスカーレッドの設定値に問題があるという事になりますでしょうか?
TaichiYanagiya

2023/02/20 14:57

②の OpenVPNサーバー、クライアントで tun0, tun1 が逆になっていないでしょうか? OpenVPNクライアントの設定ファイルでは "dev tun0"、OpenVPNサーバーの設定ファイルでは "dev tun1" と指定した方がいいかもしれません。 また、②の tun0, tun1 それぞれでパケットキャプチャするとどこまでパケットが届いているのか、NAT しているのかがわかると思います。 ("tcpdump -i tun0 -nn icmp", "tcpdump -i tun1 -nn icmp" など。)
slemntqe

2023/02/21 09:36 編集

ありがとうございました! 長くなるので結論から述べると解決しました。 私一人では解決できそうにない問題でしたので大変助かりました。 以下は解決まで確認したことや試したことになります。 > ②の OpenVPNサーバー、クライアントで tun0, tun1 が逆になっていないでしょうか? おっしゃる通りでした。 何度か②のOpenVPNサーバーと②のOpenVPNクライアントを再起動するうちにサーバーとクライアントのtun0, tun1が逆になってしまったようです。 設定ファイルで明示的にtun0, tun1を指定して意図しないtun0, tun1にならないようにしました。 ping(ICMP)は問題なく通るようになりました。 tracertの出力から見てわかるように②(10.8.0.1)と③(10.7.0.1)を経由しており期待する動きになっています。 https://ddjkaamml8q8x.cloudfront.net/questions/2023-02-21/3ec4ad55-2258-437e-95f9-b7ac33921fb4.png ※pingのtcpdumpを念のため残します https://ddjkaamml8q8x.cloudfront.net/questions/2023-02-21/1b5ff64e-a3b9-4c57-aa3a-2dfc028f541a.png また、疎通確認用の新規サーバー(グローバルIPアドレス: 172.105.x.x)をレンタルしました。 このサーバーで以下コマンドで簡易サーバーを建て、そこに向かってTest-NetConnection(Linuxだとncコマンドに相当)で疎通確認を取りました。 (簡易サーバーのポート8000番へのアクセスはVPN無しの環境から疎通確認済みです。簡易サーバ側はポート開放が問題なくされており、疎通に問題がないです。) ``` nc -k -v -l 8000 ``` 以下は①が②へVPN接続後の出力です ・Test-NetConnection出力 https://ddjkaamml8q8x.cloudfront.net/questions/2023-02-21/daae2817-9bed-4c24-bf93-ac277f242517.png ・tcpdump出力 https://ddjkaamml8q8x.cloudfront.net/questions/2023-02-21/c5303232-718e-4de7-983d-92d8674f1549.png これらの結果からICMPのみが正常に転送されている事がわかりました。 ICMPのみが転送を許可されて他はブロックされていると疑い、ファイアウォール設定を確認しました。 その結果、/etc/ufw/before.rules内にデフォルトで以下のような記載がありました。 ICMPのみが転送を許可されています。 ``` -A ufw-before-forward -p icmp --icmp-type time-exceeded -j ACCEPT -A ufw-before-forward -p icmp --icmp-type parameter-problem -j ACCEPT -A ufw-before-forward -p icmp --icmp-type echo-request -j ACCEPT -A ufw-before-forward -p icmp --icmp-type destination-unreachable -j ACCEPT ``` 以下ファイルを編集してICMPだけでなく、全ての転送を許可しました。 vim /etc/default/ufw ```diff - DEFAULT_FORWARD_POLICY="DROP" + DEFAULT_FORWARD_POLICY="ACCEPT" ``` vimでファイル編集後、ufw reloadを実行すると質問タイトルの「OpenVPNサーバーを2つ繋げて接続したい」が実現できました。

0

VPNってのははやいはなし、LANケーブルと同じなもん、です。
LANケーブルで繋いで、それが実現できるのか、を考えましょう

②と③は同じLANでつながってます。
当然、③でインターネットにつながっているなら、②でも繋がりますわな。
#同じLANに繋がってるので

さて、①と②は、③とは別のセグメントで接続されてます。
これでは、インターネットに繋がるはずもありません

手っ取り早く①でもつながるようにするのであれば、そっちの方も同じLANにしてしまいましょう

投稿2023/02/19 11:11

y_waiwai

総合スコア86794

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

slemntqe

2023/02/19 12:31 編集

> さて、①と②は、③とは別のセグメントで接続されてます。 > これでは、インターネットに繋がるはずもありません ①は②にVPN接続出来ている状態です。 ②は③にVPN接続出来ている状態です。 ②は③を経由してインターネットに接続出来ている状態です。 ①は②と③を経由してのインターネット接続が出来ていない状態です。 (tracertの結果から10.8.0.0/24から外に出られていないと思います) >②と③は同じLANでつながってます。 先程書いた通りVPN接続自体は成功しているので、①、②、③は全て同じLANで繋がってるという意味になりませんか? ②で何らかの設定(ルーティング?)を適切に設定出来れば①は②と③を経由してインターネットに接続可能と思っています。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.83%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

VPN

VPN(Virtual Private Network)は、仮想プライベートネットワークとも呼ばれ、インターネットに接続してるユーザー間に仮想的な通信トンネルを構築した組織内ネットワークです。認証や暗号化を用いて通信経路を保護し安全なネットワークの構築ができます。

OpenVPN

OpenVPNは、暗号化してサーバ間を繋ぐVPNソフトウェア。OSSで開発されており、負荷分散やフェイルオーバー、もしくは細かなアクセス権設定の実装もできます。様々なOSに移植され、各OS上での利用が可能です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。