ポートをVPNクライアントに転送しますか?


21

私はちょっとしたパズルに遭遇しましたが、解決策を見つけることができませんでした。現在、私はVerizon 3Gを介して(悲しいことに)ネットに接続しています。すべての着信トラフィックをフィルタリングするため、ポートを開いて接続を受け入れることはできません。

現在、linode.comにLinux仮想マシンがあり、ポートフォワーディングをインストールpptpdして実行しようと考えましたiptables。私はpptpdインストールしました、そして、私のマシンは幸せに接続します。とはいえ、ここにいくつかの一般的な情報があります:

サーバー(Debian)WAN IP:eth0のxxxx-pptpd IP:ppp0のyyy1-クライアントVPN IP:yyy100

気が狂っていないことを確認するために、サーバーからクライアントの開いているポートへの接続を試みましたが、クライアントはVPN IP経由で接続を受け入れます。

私が達成したいのはこれです:

インターネット-> WAN IP:ポート->クライアントVPN IP:ポートに転送

たとえば、クライアントでポート6000を開いている場合、人がxxxx:6000にtelnetで接続でき、サーバーはそれをキャッチして192.168.3.100:6000に転送します。

少なくとも20種類のGoogledのiptables設定を試しましたが、まだ機能していません。誰もアイデアを持っていますか、おそらく私が知らないかもしれないまったく異なるアプローチもありますか?ここでの目標は、恐ろしくファイアウォールで保護された接続、できればTCPトラフィックとUDPトラフィックの両方をリッスンすることです。

回答:


25

これを機能させるには、VPNサーバー(Linode)で3つのことを行う必要があります。

  1. IP転送を有効にする必要があります。

    sysctl -w net.ipv4.ip_forward=1
    
  2. ポートを転送する宛先NAT(DNAT)を設定します。これは標準のポートフォワーディングのものであるため、おそらく既に理解しているでしょうが、完全を期すためです。

    iptables -t nat -A PREROUTING -d x.x.x.x -p tcp --dport 6000 -j DNAT --to-dest y.y.y.100:6000
    
  3. VPNクライアントの観点から、接続がVPNサーバーから来るように、ソースNAT(SNAT)をセットアップします。

    iptables -t nat -A POSTROUTING -d y.y.y.100 -p tcp --dport 6000 -j SNAT --to-source y.y.y.1
    

SNATが必要な理由は、VPNクライアントが、VPN経由ではなく、デフォルトゲートウェイ(つまりVerizon 3G)経由で接続(zzzz)を開始したホストに返信パケットを直接送信するためです。したがって、返信パケットのソースIPアドレスは、xxxxではなくVerizon 3Gアドレスになります。これにより、zzzzが実際にxxxxへの接続を開始したため、あらゆる種類の問題が発生します。

ほとんどのポートフォワーディングのセットアップでは、ポートフォワーディングを実行するホストが宛先ホスト(ホームルーターなど)のデフォルトゲートウェイでもあるため、SNATは必要ありません。

また、ポート6000を別のポート(7000など)に転送する場合、SNATルールは6000ではなく7000で一致する必要があることに注意してください。


AGWAこんにちは、ご回答ありがとうございます。私はすでにip_forwardingをオンにしていて、ルールは完全に機能しましたが、最初はそうではありませんでした。問題は(iptables noobnessで)iptables -Fがnatエントリをフラッシュせず、iptables -Lがそれらをリストしていなかったことに気づかなかったことです。それらを適切にリストする方法を考え出した後、以前の試行からいくつかの競合するエントリに気付きました。ルールをフラッシュして試した後、完全に機能します。簡単な質問ですが、ルールでtcpを指定します。これを「すべて」に変更すると、両方のTCP / UDPトラフィックで機能しますか?
Vile Brigandier

どういたしまして!(ちなみに、私使用してのようなiptables-save私のiptablesのルールを表示する-出力は人間の消費のために意図されていない間、それはまだ読めるだと示しているすべての。あなたのiptablesのルール)いいえ、残念ながらあなたは「すべて」が、ために使用することはできません--dportだけ実際にポートを持つプロトコルで動作します(「すべて」には、ポートの概念を持たないICMPなどが含まれます)。TCPとUDPには個別のルールが必要です。
AGWA

iptables-saveのヒントをありがとう。すべては、TCPとUDPの両方で期待どおりに機能します。乾杯。
ヴァイルブリガンディア

2
この答えの更新は、iproute2を使用すると、実際にVPNクライアントをセットアップして2つのゲートウェイを持ち、DNATトラフィックをVPN経由でルーティングできるようにすることです。これは、SNATを使用せず、すべてのトラフィックがVPNサーバーから送信されているように見える場合に役立ちます。thomas-krenn.com/en/wiki/Two_Default_Gateways_on_One_Systemには、これを設定する方法に関する情報が含まれています。
PressingOnAlways

ufwで8080を許可していても、ufwが無効になっている限り機能しますが、ufwを有効にするとすぐに、この転送は機能しません。
スディールN

3

私もこの問題を抱えており、何時間も解決しようとしました。私の解決策は次のとおりです。

  • VPNClient同じものを1つ以上持っていましたIPAddress。だから私はそれらのそれぞれに静的を与えましたIPAddress

/ etc / openvpn / staticclientsなど、クライアントスクリプトを保存するディレクトリを定義し、ディレクトリを作成します

mkdir /etc/openvpn/staticclients

サーバーのopenvpn構成ファイルにオプションとしてこのディレクトリを追加します。

client-config-dir /etc/openvpn/staticclients

クライアントごとにファイルを作成する必要があります。ファイル名common nameは、クライアントの証明書で指定された属性と一致する必要があります。次のコマンドは、コンピューター証明書からCNを取得します。

この例ではpushs IPAddressでクライアントに10.1.134.110/10.1.134.109をcommon name TESTCLIENTともサブネット10.1.135.0のための追加ルートをプッシュ。

cat /etc/openvpn/staticclients/TESTCLIENT

ifconfig-push 10.1.134.110 10.1.134.109
push "route 10.1.135.0 255.255.255.0 10.1.134.62"
  • http://www.yougetsignal.com/tools/open-ports/およびhttp://canyouseeme.org/はポートを正しく検出しませんでした。Webサイトがこれらのポートを表示できるように、クライアントでアプリケーションを追加で起動する必要がありました。

  • 追加のSNATルールは必要ありません。これらのルールのみが必要でした:

sysctl -w net.ipv4.ip_forward=1

iptables -t nat -A PREROUTING -p tcp --dport 28006 -j DNAT --to 10.1.134.110

2

ほとんどのサーバーでは、デフォルト構成でIP転送が無効になっています。VPN経由で着信接続をリダイレクトする場合は、有効にする必要があります。

これを試して:

sysctl -w net.ipv4.ip_forward = 1

iptables構成に加えて。


0

あなたが達成したいことは、(おそらく)pptpdOpenVPNとiptablesで非常に可能ですが、このユースケースにはtincがより良い候補であると思うかもしれません。このユースケースに合わせてtincをセットアップする方法を説明したこの記事を読みました。これはpptdp、OpenVPNパーツの(潜在的に単純な)代替手段です。次に、iptablesに対してまったく同じルールが必要になります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.