web-dev-qa-db-ja.com

OpenVPNを使用したGoogle Compute Engine上のVPNサーバー

私はすべてのトラフィックのVPNサーバーとしてGoogle Compute Engineサーバーを使用しようとしています(私はロシアに住んでいるため、検閲に関していくつか問題があります)。

GCE上のVPN に関するミニチュートリアルがありますが、これはGCE内の2つのサーバー間のネットワークに関するものであり、OpenVPNに関するものではありません。

DebianでOpenVPNを使用してVPNをセットアップする について、別のチュートリアルからすべての手順を実行しましたが、クライアントからVPNに接続できますが、接続を開くことができません(Googleにpingすることさえできません)。 。サーバーでは、いつものようにpingしてすべてをダウンロードできます。

Linodeに同じ設定でVPNを使用していますが、正常に動作します。したがって、問題はGCEネットワークルーティングまたはファイアウォールルールにあります。

私は多くのバリアントを試しましたが、何も機能しません。設定を見て、何を変更すればよいか教えてください。

//問題が解決されたため、構成行を削除しました//

13
OZ_

まず、@ Shivoxの answer に感謝します。

そしてここに簡単なハウツーがあります:

  • 追加のネットワークを作成することをお勧めします(「ネットワーク」タブを参照)。ネットワーク設定で、tcp:22(存在しない場合)、tcp:9700、tcp:1761917619ここは可変です-好きなポートに変更してください(範囲は9075-65534です)。 3つのルールと2つのデフォルトルートのみ。
  • [Create Compute Engine instance]に移動し、[Show advanced options]をクリックして、ポート転送を許可し、サーバーの場所を選択します。
  • 次に(場所を選択したら)、静的IPをサーバーに追加します。
  • Ubuntu 14.04イメージ(正確にはこのバージョン)を選択します。
  • インスタンスを作成する
  • SSH経由で接続する(最も簡単な方法-GCEパネルのブラウザー内ツールを使用)
  • Sudo su
  • apt-key update && apt-get update && apt-get -y upgrade && apt-get -y install python-software-properties && apt-get -y install software-properties-common && add-apt-repository -y ppa:pritunl && apt-get update && apt-get -y install pritunl
  • ブラウザでhttps://instance_ip:9700
  • DBについての質問は「保存」をクリック
  • ログインウィンドウで、ユーザー名とパスワードとしてpritunlを使用します
  • 管理者ユーザーのユーザー名とパスワードを変更します
  • 組織を追加し、次に2人のユーザー(デスクトップおよびモバイル用)
  • 「サーバー」タブの「サーバーを追加」をクリックします
  • 最初のステップからのポート番号(例として17619)とt​​cpプロトコルを使用します。
  • 組織をサーバーに接続
  • サーバーを起動
  • [ユーザー]タブで、両方のユーザーのキーをダウンロードします(ovpnファイルが内部にあるtarアーカイブ)。

OS XにはViscosityを、iOSにはOpenVPN接続をクライアントとして使用しています。 Viscosityで、[Networking]タブの[Send all tr​​affic over VPN connection]オプションをオンにします。

7
OZ_

次の2つの方法のいずれかで、ping、traceroute ...を実行できるにもかかわらず、VPNを介してWebを閲覧できないという問題を解決できます。

まず、クライアントとサーバーの両方のconfファイルで「proto udp」を「proto tcp」に変更することにより、UDPの代わりにTCPプロトコルを使用できます。

次に、クライアントとサーバーの両方のconfファイルで「dev tun」を「dev tap」に変更することで、tunの代わりにtapデバイスを使用できます。

問題が何であるかはわかりませんが、Google側からの問題のようです。

6
Shivox

Google VPCは、VM外部IPを持つ内部IP以外のsource_ipを持つパケットをドロップしていることに注意してください。

このドキュメント https://cloud.google.com/compute/docs/vpc/advanced-vpc の状態:

VPCネットワークはIPヘッダーを書き換えて、インスタンスの外部IPアドレスをソースとして宣言します。インスタンスに外部IPアドレスがない場合、呼び出しは許可されず、VPCネットワークは送信者に通知せずにパケットをドロップします。

したがって、openVPNが他のネットワークからパケットを転送しているだけの場合、source_ipは既存のVMの内部IPと一致しないため、パブリック内部へのパケットはドロップされます。このため、NAT VPNネットワークなどのローカルネットワークを出るパケットが必要です。

Chain POSTROUTING (policy ACCEPT)
target      prot opt source              destination         
MASQUERADE  all  --  192.168.0.0/16      !192.168.0.0/16

NAT=を自動的に構成するため、OZ_回答で言及されている「Pritunl」は機能します。

4
Piotr Tabor

これは実際には答えではありませんが、サイトでは私がそれをコメントとしてコメントに追加することを許可していませんでした。

それにもかかわらず、私はあなたが上で詳述したのとほぼ同じ構成を持っています(私はサーバーでdnsmaqを構成していませんでした)

残念ながら、VPNは期待どおりに機能していません。 VPNに接続している間、アドレスを解決し、一部のインターネットホストにpingを送信し、完全なトレースを行うこともできます。しかし、ブラウザを開いてサイトに移動すると、接続が非常に遅くなります。接続に何が影響しているのかわかりませんが、本当に奇妙な問題です。

たぶん、Googleの誰かが何が起こっているのかを知る手助けをしてくれるでしょう。

PS 1.他の人が以前に提案したように、IP転送が有効かどうかを確認できますか?私にとって、再起動後にnet.ipv4.ip_forwardの値を確認する唯一の方法は、/ etc/sysctl.dでカスタムルールを使用した後です

たとえば、次のコマンドを使用してルールを追加できます。

$ Sudo echo "net.ipv4.ip_forward = 1" > /etc/sysctl.d/90-useroverrides.conf

PS 2.転送が機能する場合、VPNに接続している間に外部ホストへのトレースルートをテストできますか?これを行ったときに得られた出力は少し奇妙です(同じIPに複数のホップがあるのはなぜですか????):

$ Sudo traceroute www.yahoo.com -T -p 80 -N 1 -z 0.5 -q 1
traceroute to www.yahoo.com (98.139.183.24), 30 Hops max, 60 byte packets
 1  209.85.241.26 (209.85.241.26)  0.764 ms
 2  209.85.241.34 (209.85.241.34)  0.668 ms
 3  209.85.241.26 (209.85.241.26)  0.966 ms
 4  209.85.241.36 (209.85.241.36)  0.702 ms
 5  209.85.241.28 (209.85.241.28)  0.865 ms
 6  209.85.241.36 (209.85.241.36)  0.642 ms
 7  209.85.241.26 (209.85.241.26)  0.921 ms
 8  209.85.241.28 (209.85.241.28)  18.837 ms
 9  72.14.238.107 (72.14.238.107)  13.378 ms
10  72.14.237.131 (72.14.237.131)  38.275 ms
11  209.85.254.131 (209.85.254.131)  13.349 ms
12  *
13  ae-8.pat1.bfz.yahoo.com (216.115.101.231)  44.903 ms
14  ae-4.msr1.bf1.yahoo.com (216.115.100.25)  45.323 ms
15  xe-10-3-1.clr1-a-gdc.bf1.yahoo.com (98.139.232.101)  47.382 ms
16  et18-25.fab6-1-sat.bf1.yahoo.com (98.139.128.103)  45.793 ms
17  po-13.bas1-7-prd.bf1.yahoo.com (98.139.129.209)  41.143 ms
18  ir2.fp.vip.bf1.yahoo.com (98.139.183.24)  42.451 ms

PS 3.正しく機能しているように見える唯一のことは、VPNがホストからの外部IPを使用してインターネットにアクセスすることです。

$ Sudo curl --interface tun0 checkip.dyndns.org
<html><head><title>Current IP Check</title></head><body>Current IP Address: 107.178.XXX.XXX</body></html>
3
Mario

編集/etc/sysctl.confのコメントを解除して#net.ipv4.ip_forward=1

これにより、OpenVPNがトラフィックを転送できるようになります。

1
Justin Miller

VMインスタンスでIP転送を有効にする必要があります。そうしないと、パケットがVMに到達しません。これは、VMで設定できるnet.ipv4.ip_forward = 1とは異なります。

IP転送は、VMを作成する前に1回だけ設定でき、後で変更することはできません。新しいVM=をクリックしてManagement, security, disks, networking, sole tenancyをクリックします: enter image description here

次に、NetworkingタブでNetwork Interfaceをクリックし、IP転送をONに設定します。

enter image description here

1
Pavel P

ネットワークについて。

1)コンソールでOpenVPNサブネット(10.8.0.0/24など)からのすべてのトラフィックを有効にします

2)マスカレードをネットワークに追加することを強くお勧めします

firewall-cmd --zone=trusted --add-masquerade --permanent
firewall-cmd --reload-all

3)カーネルでパケットルーティングを有効にすることを忘れないでください

a)一度

 echo 1 > /proc/sys/net/ipv4/ip_forward

b)/etc/sysctl.confに永久に:

 net.ipv4.ip_forward = 1
0
Mikolas Pansky

OpenVPN自体のトラフィックを許可するルールを追加する必要があります。

iptables -A INPUT -p udp --dport 1194 -j ACCEPT
0
Paul Rudnitskiy