OpenVPNを実行しているVPSを介してすべてのトラフィックをクライアントに転送させようとしています。ご覧のとおり、ドメインとraw IPアドレスの両方へのpingは許可されますが、curlを介して行われたようなトラフィックは許可されず、tracerouteは何も起こりません。 VPNに接続していない場合、トラフィックは正しく機能します。
すべての情報はこちら: https://Pastebin.com/tGspNefn
ありがとうございました。
以下の解決策のおかげで構成を機能させる:
サーバー:
port <integer>
proto udp
dev tun
ca ca.crt
cert vpnserver.crt
key vpnserver.key # This file should be kept secret
dh dh4096.pem
tls-auth ta.key 0
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
Push "redirect-gateway autolocal"
Push "dhcp-option DNS 8.8.8.8"
Push "dhcp-option DNS 8.8.4.4"
keepalive 10 120
cipher AES-256-CBC
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3
クライアント:
client
dev tun
proto udp
remote x.x.x.x <port number>
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert vpnclient.crt
key vpnclient.key
tls-auth ta.key 1
ns-cert-type server
cipher AES-256-CBC
comp-lzo
verb 3
ソリューションには2つの部分があります。
1。すべてのトラフィックをトンネルにリダイレクトします
最も簡単な解決策-OpenVPNの--redirect-gateway autolocal
オプションを使用します(またはredirect-gateway autolocal
として構成ファイルに追加します)。
2。OpenVPNサーバーでトラフィックを処理する
トンネルが稼働したので、すべてのトラフィックがトンネルに入り、tun0
インターフェースからサーバーの端にポップアップします。
機能させるには、次の2つを設定する必要があります。
a。パケット転送を有効にする
ほとんどのディストリビューションでは、デフォルトでパケット転送が無効になっているため、トンネルインターフェースからのパケットがパブリックインターフェースに到達することはありません。次を使用して転送を有効にする必要があります。
~ # sysctl net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
テストしたら、/etc/sysctl.conf
で変更を永続的にします
また、iptables
が転送されたトラフィックをブロックしていないことを確認してください:
~ # iptables -I FORWARD -j ACCEPT
これはテストには十分です-本番環境ではファイアウォールルールをもう少し具体的にしたいと思うでしょうが、ここでは範囲外です。
b。NATトンネルからの発信パケット
転送が有効になっていると、パケットはデフォルトで送信元アドレスを変更せずに転送されます。つまり、10.8.0.6
-このようなパケットは、ISPゲートウェイでドロップされるか、宛先に到達した場合でも、返信で方法が見つからないバック。これらのプライベートアドレスは、インターネット上でルーティングできません。
解決策は、NAT=出力トラフィックです。つまり、プライベート10.8.0.6
アドレスをVPNサーバーのパブリックIPに置き換えます。これにより、応答がVPNサーバーに到達し、そこで取得されます。トンネルに転送されます。
~ # iptables -t nat -I POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
。テストする
次に、VPNクライアントからping 8.8.4.4
を試してください。返信が表示されます。そうでない場合はお知らせください:)