web-dev-qa-db-ja.com

Linuxベースのルーターを使用したAzureSite-to-Site VPNは、他のトラフィック用にNAT)を維持しながら、VPNポートをRRASサーバーにブリッジします

RRASを使用してAzureSite-to-Site VPNを稼働させようとしていますが、NATを許可しながら、NATを使用せずにVPNポートとプロトコルをRRASサーバーにブリッジするようにルーターのiptablesを構成するための支援が必要です。 ]他のすべてのトラフィックに使用されます。

AzureとVMを正しく構成することができ、リンクを介して流れるデータを使用して接続を稼働させることができます(そして、Azureポータルに双方向に接続されたデータとして表示されます)。ただし、セットアップされた接続は使用できません。pingを実行できないか、AzureVMとローカルマシン間で何らかの形式の接続を確立していないようです。

これは、Azureのサイト間VPNで、ローカルVPNゲートウェイがNATファイアウォール(自宅のブロードバンドであるため使用する必要があるため、1つしかない)を経由せずにインターネットに直接接続する必要があるためだと思います。 IP)したがって、接続を確立できますが、ルーターのNATは、RRASサーバーに到達するとパケットを正しくルーティングできないようにパケットを変更します。

代替のサイト間VPNソリューション(OpenVPN、SoftEther、RRAS自体)を試しましたが、どれも正しく機能せず、2つのVMのホスティングVPN接続がすべてに接続でき、ホームネットワークサーバーが正しく接続できるという同じ問題が発生します。 Azure側に接続するようにルーティングされましたが、Azure VMの制限(単一のネットワークアダプターのみでプロミスキャスモードを有効にする機能がない)またはAzure仮想ネットワーク自体が原因で、他のAzure VMが接続できないことを意味すると思いますVPNサーバーを経由する静的ルートを追加したり、追加のゲートウェイとして追加したりしても、ホームネットワークに接続します。

最新のMerlinビルドを実行しているAsusRT-AC68Uルーターを使用しているので、次の方法でiptablesルールとネットワーク構成を変更することでAzure Site-to-SiteVPNを使用できることを望んでいます。

  • NATを引き続き使用して、他のローカルサーバーやワークステーションがインターネットに接続し続けたり、ポートを転送したりできるように、既存のiptables構成をほとんど変更しないでください。
  • ホームネットワークのRRAS VMには2つのネットワークアダプターがあり、1つはプライベートIPを使用し、もう1つはプライベートIPを使用しますが、Microsoftの推奨に従って、これはパブリックIPに変更されます。
  • 最後に、私が達成する方法がわからない部分は、特定のVPNポートとプロトコル(UDP 500、UDP 4500、UDP 1701、およびESP(プロトコル#50))をNATから除外することです。そして、ホームネットワークのパブリックIPでセットアップされたVM上のネットワークアダプターに直接ブリッジされます。

現在、ネットワークは次のようになっています。

Azure VM-192.168.1.0/25、パブリックIPで動的ルーティングを使用するVPNゲートウェイ。

ホームネットワーク192.168.0.0/24:

VDSLモデム<-PPPOEブリッジで、ルーターにパブリックIPがあります-> Asusルーター<-NAT-> 192.168.0.0.24

これが私が到達しようとしていることであり、RRASはVPNの目的でのみパブリックIPを持っています。

  • VDSLモデム<-PPPOEブリッジなので、ルーターはパブリックIP-> Asusルーター
    • <-VPNポートとプロトコルのブリッジ-> RRASVMのパブリックアダプターのMACアドレス
    • <-NATその他すべて-> 192.168.0.0/24

より簡単な解決策がある場合は、サイト間VPNを機能させるための他の提案を受け入れます。

[更新1]

現在、次のことを考えています。RRASHyper-VVMに追加のネットワークアダプターを割り当て、VLAN 635に割り当てました。何らかの理由で変更したい場合は、無差別モードが有効になります。 Macアドレス。次に、2つのLink-Layer TopologyDiscoveryアイテムとIPv4以外のすべての接続アイテムを無効にしました。

IPv4設定に、パブリックIPアドレス、255.255.255.255のサブネットマスク、およびルーターのppp0アダプターと同じゲートウェイであるゲートウェイを割り当てました。

ルーターで次のコマンドを実行して、Azure VPNゲートウェイと通信しようとしているトラフィックをVLANに転送しようとしました。これにより、NATを使用せずにルーティングできるようになります。

/usr/sbin/ip link add link br0 name br0.635 type vlan id 635
/usr/sbin/ip link set dev br0.635 up

/usr/sbin/iptables -I INPUT -i br0.635 -j ACCEPT
/usr/sbin/iptables -I FORWARD -i ppp0 -o br0.635 -s <Azure gateway IP> -j ACCEPT
/usr/sbin/iptables -I FORWARD -i br0.635 -o ppp0 -d <Azure gateway IP> -j ACCEPT
/usr/sbin/iptables -I FORWARD -i ppp0 -o br0.635 -s <ppp0's gateway> -j ACCEPT
/usr/sbin/iptables -I FORWARD -i br0.635 -o ppp0 -d <ppp0's gateway> -j ACCEPT

残念ながら、これは機能せず、RRASで接続しようとすると、リモートサーバーが応答していないと表示されます。

3
Paul

それで、私は多くのことを調べた後、これを理解することができました。ホームネットワークの背後にあるLinuxボックス(Raspberry Pi/Arch Linux)で実行されるOpenSwanでネイティブのAzure Site-to-SiteVPN機能を使用できます。 NATルーター。

ネットワークトポロジー:

  • 192.168.0.0/24-ホームネットワーク
  • 192.168.1.0/24-Azureネットワーク
  • 192.168.0.1-ホームルーターのプライベートIP
  • 192.168.0.2-ホームネットワークのVPNサーバーおよびゲートワットとして機能するLinuxボックス

まず、Azureを次のようにセットアップします。

  • 通常どおりリモートネットワークです
  • パブリックIPとしてVPNアドレスを使用するローカルネットワーク
  • ローカルネットワークにリンクしているAzureネットワークの[サイト間]チェックボックスを有効にしました
  • staticゲートウェイを作成したため、IKEv1が使用されます

ホームネットワークのルーターで、Openswan(192.168.0.2)を実行しているLinuxゲートウェイに以下を転送しました。

  • UDP 500
  • UDP 4500
  • プロトコル50(GRE)

私のipsec.confは次のようになります。

version 2.0

config setup
    nat_traversal=yes
    virtual_private=%4:192.168.0.0/24
    protostack=auto
    interfaces="ipsec0=eth0"

conn Azure
    authby=secret
    auto=start
    type=tunnel
    left=192.168.0.2
    leftsubnet=192.168.0.0/24
    leftnexthop=192.168.0.1
    right=<Azure's VPN gateway IP>
    rightsubnet=192.168.1.0/24
    ike=3des-sha1-modp1024,aes128-sha1-modp1024
    esp=3des-sha1,aes128-sha1
    pfs=no

ipsec.secrets:

192.168.0.2 <Azure vpn gateway> : PSK "Azure's PSK"

これでリンクが稼働し、サイト間のルーティングが可能になりました(多くのフラストレーションの後の双方向)。

/etc/sysctl.conf:

net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.icmp_ignore_bogus_error_responses = 1

'ipsec verify'を幸せに保つためにブート時に実行されるbashスクリプト:

#!/bin/bash

for vpn in /proc/sys/net/ipv4/conf/*; do
    echo 0 > $vpn/accept_redirects;
    echo 0 > $vpn/send_redirects;
done

sysctl -p

最後に、最も多くのいじりを要した私のiptablesルール:

フィルタテーブル。これにより、ホームネットワークがAzureに接続し、接続を確立できるようになりますが、AzureVMはまだホームネットワークサーバーに接続できません。

-A FORWARD -s 192.168.1.0/24 -m policy --dir in --pol ipsec -j ACCEPT
-A FORWARD -s 192.168.0.0/24 -m policy --dir out --pol ipsec -j ACCEPT
-A INPUT -p udp -m udp --dport 500 -j ACCEPT
-A INPUT -p udp -m udp --dport 4500 -j ACCEPT
-A INPUT -m policy --dir in --pol ipsec -j ACCEPT
-A INPUT -p esp -j ACCEPT

natテーブル。これにより、AzureVMがホームネットワーク上の任意のマシンに接続できるようになります。

-A PREROUTING -i eth0 -p udp -m udp --dport 4500 -j DNAT --to-destination <Azure public vpn ip>:4500
-A PREROUTING -i eth0 -p udp -m udp --dport 500 -j DNAT --to-destination <Azure public vpn ip>:500
-A POSTROUTING -o eth0 -j MASQUERADE

これにより、pingと双方向の通信が可能になり、すべてのAzure VMがホームネットワークを認識でき、すべてのホームネットワークマシンがAzureVMを認識できるようになります。

Azure側はそれ自体で正しくルーティングします。ホームネットワークでは、ルーターに静的ルートを設定して192.168.1.0/24を192.168.0.2に送信しましたが、マシンでテストするために静的ルートを作成しました。

route -p ADD 192.168.1.0 MASK 255.255.255.0 192.168.0.2 METRIC 100

少なくとも誰かがこれが役立つと思ってくれることを願っています。この設定には長い時間がかかり、部分的に機能するソリューションの組み合わせだけで十分な完全なガイドはありません。

5
Paul