web-dev-qa-db-ja.com

OpenVPNがVPN経由ですべてのトラフィックをリダイレクトしない

VPNの設定が完了したばかりで、Googleは私のIPがVPNのIPであることを示しているので、これは問題なく機能します。ただし、SSHを介してVPNサーバーにログインすると、最後のログインが(VPNを使用していない)IPのログインであることが示されます(複数回のログイン/ログアウトの後でも)。これにより、すべてのデータがVPNを通過しているわけではないと私は信じています。

私のserver.conf次のディレクティブがあります。

Push "redirect-gateway def1 bypass-dhcp"
Push "dhcp-option DNS 8.8.8.8"
Push "dhcp-option DNS 8.8.4.4"

そして、iptablesは次のように設定されています。

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

これを修正する方法はありますか?それ

2
Alexander North

これは100%期待される動作です。 VPN接続を介してすべてのトラフィックをルーティングするために、仮想インターフェイスをターゲットとしてデフォルトルートが追加されます。ただし、これには問題があります。VPN接続自体を伝送するために使用されるネットワークパケットもVPNインターフェイスにルーティングされ、一種のルーティングループが作成されます。これを解決するために、VPNサーバーへの静的ホストルートが、通常のインターネットギャットウェイをターゲットとして使用して追加されます。このようにして、OpenVPNによって作成されたパケットは、インターネット経由でOpenVPNサーバーに移動し、他のすべてのパケットはVPNリンク経由で送信されます。

ホストルートがあるため、VPNサーバーのインターネットアドレスにSSHで接続しようとすると、接続は通常のインターネット接続を経由し、whoまたはlast。一方、VPNトンネルのもう一方の端にSSHで接続すると、接続はクライアントのトンネルの端に割り当てられたIPアドレスから発信されているように見えます。

たとえば、これは典型的なOpenVPN仮想インターフェースの構成方法です。

$ ifconfig
...
tun0: flags=8851<UP,POINTOPOINT,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    inet 10.10.11.9 --> 10.10.11.10 netmask 0xffffffff 
    open (pid 48658)

この場合のVPNトンネルのリモートエンドは10.10.11.10。これはBSDスタイルのifconfig出力(実際にはOS X)です。 Linuxでの出力は少し異なります。そしてこれは対応するホストルートです(これもBSD形式です):

$ netstat -rn
Destination        Gateway            Flags        Refs      Use   Netif Expire
0/1                10.10.11.9         UGSc            0        0    tun0
default            10.0.1.1           UGSc           22        0     en0
10.0.1/24          link#4             UCS             1        0     en0
10.10.11/24        10.10.11.9         UGSc            0        0    tun0
10.10.11.9         10.10.11.10        UHr             5        0    tun0
yy.yy.yy.yy/32     10.0.1.1           UGSc            1        0     en0

最初のルートはすべてのトラフィックを転送します(ローカルネットワークに送信されるルートを除く10.0.1/24)からtun0インターフェース、つまりOpenVPNへ。 OpenVPNサーバーへの静的ルートは最後の行にあります。 10.0.1.1この場合はインターネットゲートウェイです。

5
Hristo Iliev