TL / DR
静的NATルールを設定して、パブリックインターネットIPアドレスを使用して、内部ネットワークの専用マシンに直接SSHで接続できるようにします。その結果、AnyConnect VPNを介して接続すると、専用マシンにSSH接続できなくなります。どうして?どうすれば修正できますか?
長い話:
AnyConnect VPNセッションを終了するために使用するASA 5512-Xがあります。これは非常にうまく機能しています。人々はAnyConnectを使用してASAに接続し、特別に割り当てられたIPプールからIPアドレスを取得し、アクセスリストに入力したすべてにアクセスできます。
これで、ポート22をネットワーク内の専用マシンに直接転送するというアイデアがあります(内部インターフェイスと外部インターフェイスしかありません)。これにより、パブリックIPアドレスにSSHで接続し、専用マシンで終了することができます。 VPN接続。
セットアップは十分に簡単に見えました:
object network MyEndpoint
host 10.0.0.1
nat (inside, outside) static interface service tcp ssh ssh
access-list from_outside_inside extended permit tcp any object MyEndpoint eq ssh
access-group from_outside_inside in interface outside
そしてそれは実際に動作します。今私はできる
ssh ssh.mydomain.com
実際に専用マシンでsshセッションを取得します。ただし、ssh 10.0.0.1
静的NATを設定する前に、以前のようにAnyConnectを介してASA /ネットワークに接続すると、この成功はもはや機能しなくなります。
ASAの動作を決定的に制御できます。
私はときに持っていないnat (inside,outside)
私の構成でラインを、
ssh 10.0.0.1
動作しますがssh ssh.mydomain.com
動作しません。
構成の一部としてルールがある場合nat (inside,outside)
、それは逆です:
ssh ssh.mydomain.com
動作しますがssh 10.0.0.1
動作しません。
調査するには、ASAでキャプチャを設定します
capture MyEndpoint type raw-data interface inside
capture MyEndpoint type raw-data interface outside
capture MyEndpoint match tcp host 10.0.0.1 any
最初にAnyConnect経由で接続してからを試行するssh 10.0.0.1
と、nat (inside,outside)
ルールがアクティブである限り、キャプチャは何も表示/キャプチャしません。また、SSH接続の試行がサーバーに到達しません。
nat
ルールがアクティブな場合、ASAはAnyConnectに接続されたエンドポイントから発信された接続要求を食べています。
最初はアクセスリストに追加が必要だと思っていましたが、そのように機能させることができませんでした。とにかく、VPNトラフィックはどのインターフェイスでASAに入りますか?外か中?この場合は問題にならないと思います。これany
は、ソースにワイルドカード()を使用しているためです。これには、私の意見では、VPNトラフィックも含まれています。
次に、ASAは常にnatを適用すると考えました。つまり、インターネットではなくプライベートVPNアドレスから接続しているため、SYN-ACKを含むパケットが外部IPに接続され、接続が切断されます。ただし、SYNがサーバーに到達することはないため、SYN-ACKはありません。
私は一日中、「新しい」nat
コマンドの周りで頭をゆがめていました。show nat
ASAで実行すると、
Auto NAT Policies (Section 2)
1 (inside) to (outside) source static MyEndpoint interface service tcp ssh ssh
translate_hits = 0, untranslate_hits = 0
私が今日得た限りでは、これはトラフィックを残すための送信元アドレス変換のみを行います。これがどのように/なぜこれがASAに到着するインターネットから発信されたトラフィックの宛先アドレス変換を意味するのか、私にはわかりません。ASAがこのように動作する理由を誰かに説明できますか?
編集1: packet-tracer
ASAコマンドに出くわしたドキュメントを読んでくださいpacket-tracer
。私がする時
packet-tracer input inside tcp 10.100.0.2 31337 10.0.0.1 22
ASAは、フローが作成され、パケットが受け入れられることを通知します。私がする時
packet-tracer input outside tcp 10.100.0.2 31337 10.0.0.1 22
私は得る
Phase: 6
Type: WEBVPN-SVC
Subtype: in
Result: DROP
Config:
Additional Information:
Result:
input-interface: outside
input-status: up
input-line-status: up
output-interface: inside
output-status: up
output-line-status: up
Action: drop
Drop-reason: (acl-drop) Flow is denied by configured rule
ですから、私である場合を除いて、これは暗黙のうちに望まれている行動だと思います。
編集2:ヘアピンの検索
私は最終的に私を指摘し、いくつかの記事見つけ、この有望の1、私はの線に沿って、NATルールが必要になる可能性がある情報を保有しました
nat (outside,outside) \
source static \
client_vpn_pool client_vpn_pool \
destination static \
remote_office_net remote_office_net
しかし、それはうまくいきませんでした。VPNクライアントサブネット用のネットワークオブジェクトと10.0.0.1のサブネット用のネットワークオブジェクトがあります。上記のテンプレートを適用しても、期待した結果は得られませんでした。
私の場合はnat (inside,outside)
、ルールが整備されている、SSHは動作しませんが、私は10.0.0.1うまくにpingを実行することができます。nat (outside,ouside)
記事で提案されているようにルールを追加すると、pingが機能しなくなります。また、特定のホストのネットワークオブジェクトと、ip local pool
vpnクライアントに使用される範囲のみを使用した、外側のルールのバージョンも試しました。それらはすべてpingを停止します。
編集3:気にしない
それは今働いています。文字通り何も変えませんでした。私はちょうど寝ました。この動作を引き起こしたASAの内部状態があり、私が眠っている間にタイムアウトになったと思います。
それでも、packet-tracer input [inside|outside] tcp <my vpn ip> 31337 10.0.0.1 22
packet-tracer を使用すると、常にパケットがドロップされると言われることがあります。
私が置いpacket-tracer input inside
たとき、それは失敗します:
Phase: 6
Type: WEBVPN-SVC
Subtype: in
Result: DROP
Config:
Additional Information:
[...]
Drop-reason: (acl-drop) Flow is denied by configured rule
そして私がpacket-tracer input outside
それを置くとき、それは失敗します:
Phase: 6
Type: NAT
Subtype: rpf-check
Result: DROP
Config:
object network MyEndpoint
nat (inside,outside) static interface service tcp ssh ssh
Additional Information:
[...]
Drop-reason: (acl-drop) Flow is denied by configured rule
それでも、現時点では、VPN接続されたラップトップからMyEndpoint(別名10.0.0.1)へのpingとSSHは魅力的なように機能します。このASAのことはどのように機能しますか?