web-dev-qa-db-ja.com

ファイアウォールの内側にL2TP / IPSEC VPNを許可するiptablesルール

Smoothwall Expressフォーラムでこれについて質問しましたが、彼らは多くの支援を提供することをためらっています。結局のところ、彼らは本当に商用バージョンを販売したいのです。

L2TP/IPSEC VPNを提供して、間もなく入手できる新しい機械のリモートサポートを提供する必要があります(その部分は選択できません)。リモートユーザーもActive Directoryに対して認証される必要があるため、ファイアウォールではなく、Windows(2003)サーバーでVPNを実行する必要があります。

Smoothwall Expressには、通常の管理インターフェイスからの転送プロトコルのプロビジョニングがないため、rc.firewall.upのiptables設定を編集してこれを行う必要があります。ここに私の問題があります。私はiptablesを知らないので、時間をかけて読んでも、失敗するリスクは大きいと感じています。

次のセクションは現在rc.firewall.upにあります:

# IPSEC
/sbin/iptables -N secin
/sbin/iptables -A secin -i ipsec0 -j ACCEPT
/sbin/iptables -A INPUT -j secin

/sbin/iptables -N secout
/sbin/iptables -A secout -i ipsec0 -j ACCEPT
/sbin/iptables -A FORWARD -j secout

[ここにいくつかの無関係なもの]

# IPSEC
/sbin/iptables -N ipsec
/sbin/iptables -A ipsec -p udp --destination-port 500 -j ACCEPT
/sbin/iptables -A ipsec -p udp --destination-port 4500 -j ACCEPT
/sbin/iptables -A ipsec -p 50 -j ACCEPT
/sbin/iptables -A ipsec -p 51 -j ACCEPT
/sbin/iptables -A block -i ppp0 -j ipsec
/sbin/iptables -A block -i ippp0 -j ipsec
if [ "$RED_DEV" != "" ]; then
    /sbin/iptables -A block -i $RED_DEV -j ipsec
fi

私が間違っているのでなければ、2番目のブロックが転送したいトラフィックを代わりに飲み込んでしまうことになります。私はその2番目のブロックをコメントアウトして、これを追加しました。これは、PPTPパススルー(機能します)に必要な行と、さまざまなソースから取得できたものから変更されています。

# L2TP/IPSEC
/sbin/iptables -N l2tp
/sbin/iptables -A l2tp -p udp --destination-port 500 --dst 192.169.0.7 -j ACCEPT
/sbin/iptables -A l2tp -p udp --destination-port 1701 --dst 192.169.0.7 -j ACCEPT
/sbin/iptables -A l2tp -p udp --destination-port 4500 --dst 192.169.0.7 -j ACCEPT
/sbin/iptables -A l2tp -p 50 --dst 192.169.0.7 -j ACCEPT
/sbin/iptables -A l2tp -p 51 --dst 192.169.0.7 -j ACCEPT
/sbin/iptables -I FORWARD -j l2tp
/sbin/iptables -t nat -N l2tp
/sbin/iptables -t nat -A l2tp -i $RED_DEV -p tcp --dport 500 -j DNAT --to 192.169.0.7:500
/sbin/iptables -t nat -A l2tp -i $RED_DEV -p tcp --dport 1701 -j DNAT --to 192.169.0.7:1701
/sbin/iptables -t nat -A l2tp -i $RED_DEV -p tcp --dport 4500 -j DNAT --to 192.169.0.7:4500
/sbin/iptables -t nat -A l2tp -i $RED_DEV -p 50 -j DNAT --to 192.169.0.7
/sbin/iptables -t nat -A l2tp -i $RED_DEV -p 51 -j DNAT --to 192.169.0.7
/sbin/iptables -t nat -A PREROUTING -j l2tp

..しかし、それはうまくいきません。どこに詰めたの?

ちなみに、$RED_DEVは一般向けのインターフェースに変換され、明らかに192.168.0.7は私のVPNサーバーです。

更新:

上記の設定は機能することがわかりました。私はこれを自宅からテストしています。MacBookと複数のWindows XPマシンがあります。Macからは問題なく接続できますが、どのWindowsマシンを使用しても接続できません。残念ながら、リモートサポートにこのVPNを必要とする機械会社は、Windows XPのみを使用しています。

3
John Gardeniers

質問の更新で述べたように、ダブルNATソリューションを見つけるための検索用語。

このKB記事 のとおり、Windows XPクライアントマシンでは、DWORDという名前の新しいAssumeUDPEncapsulationContextOnSendRule値をHKLM\System\CurrentControlSet\Services\IPSecに作成する必要があります。double NATの場合、2の値が必要です。

Windows 7のソリューションを見つける必要があります。遅かれ早かれ、それに対処する必要があるからです。

更新

同じ問題を抱えている人のために、Windows 7の修正は、DWORDという名前の新しいAssumeUDPEncapsulationContextOnSendRule値をHKLM\SYSTEM\CurrentControlSet\services\PolicyAgentに作成することです。繰り返しますが、ダブルNATの場合、2の値が必要です。

4
John Gardeniers