web-dev-qa-db-ja.com

FreeBSDルーターに設定されたVPN接続を内部ホストに使用させるにはどうすればよいですか?

簡単に言うと、ルーターの背後でNAT NAT $ ===ルーターに設定されたVPN接続を使用するために、内部ネットワーク上のホストからトラフィックを取得するにはどうすればよいですか?

私は4つのネットワークインターフェースを備えたFreeBSD9ルーターを持っています。 1つはISPに外部接続され、もう1つは内部サブネットに接続されています。内部インターフェースはNAT(pfによる)を使用して外部世界に接続します。

ここで、サブネットの1つにあるホストからのすべてのトラフィックで、FreeBSDマシンに設定されたPPTP VPN接続を使用するようにします。最終的には、内部ネットワーク上のホストになります。ホスト自体でVPNクライアントを使用せずにVPNを使用します。

Mpd5でVPNクライアントをセットアップすることができました。ルーターからVPNサーバーにmpd5で接続すると、IPアドレスを持つ新しいネットワークインターフェイス(ng0)が表示されます。

私の問題は、ここからどこに行けばいいのかわからないことです。 IPアドレスを持つインターフェイス(ng0)だけがあります。内部のNATされたネットワークからのトラフィックにVPN接続を使用させるにはどうすればよいですか?

私に正しい方向に答えたり指摘したりしようとしている場合は、VPN、ルーティング、NATまたはpf-私は明らかにこれについて何も知らないか理解していない」という仮定から始めることができます。ほとんどありません(どこからどこへのルートを追加しますか?着信パケットと発信パケットに何をするpfルールを追加しますか?など)

構成

これは、ルーターからVPNサーバーに接続した直後です。

My network

私の/etc/pf.conf:

ext_if = "em0"
local_if = "em1"
wifi_if = "em2"
misc_if = "em3"
localnet = "{" $local_if:network $wifi_if:network $misc_if:network "}"
nat on $ext_if from $localnet to any -> ($ext_if)
pass in all
pass out all keep state

ルーティングテーブル:

Destination        Gateway            Flags    Refs      Use  Netif Expire
default            188.60.52.1        UGS         0   998893    em0
10.0.1.0/24        link#10            U           0   159240    em1
10.0.1.1           link#10            UHS         0      358    lo0
10.0.2.0/24        link#11            U           0   503719    em2
10.0.2.1           link#11            UHS         0        0    lo0
10.0.3.0/24        link#12            U           0  3773731    em3
10.0.3.1           link#12            UHS         0        0    lo0
98.158.118.1       link#15            UH          0        0    ng0
98.158.118.63      link#15            UHS         0        0    lo0
127.0.0.1          link#13            UH          0        0    lo0
188.60.52.0/22     link#9             U           0        0    em0
188.60.55.17       link#9             UHS         0        0    lo0

VPNサーバーに接続するには、これを/usr/local/etc/mpd/mpd.confにあります。

strongvpn:
    create bundle static B1
    set bundle yes compression
    set ipcp ranges 0.0.0.0/0 0.0.0.0/0
    set ccp yes mppc
    set mppc yes e128
    set mppc yes stateless

    # Not using these yet, as I don't know what to put in them ...
    #set iface up-script /usr/local/etc/mpd5/ip-up.sh
    #set iface down-script /usr/local/etc/mpd5/ip-down.sh

    create link static L1 pptp
    set link action bundle B1
    set auth authname XXXXXXXXX
    set auth password XXXXXXXXX
    set link max-redial 0
    set link mtu 1460
    set link keep-alive 20 75
    set pptp peer 98.158.112.17
    set pptp disable windowing
    open
3
Erik Tjernlund

ここでの重要な質問は、「VPNをもう試しましたか?」です。すべてが順調に見えます。 FreeBSDボックスがすでにVPNのリモート側にルーティングできる場合、作業はほぼ完了しています。これは、接続が有効であり、リモートネットワークへのルートを認識していることを意味します。

ルーターの背後にあるホストは、「VPNを介して」通信するために変更をまったく必要としないはずです。ルーターがデフォルトゲートウェイとして設定されている場合、リモートネットワーク(VPNの反対側を含む)へのすべてのトラフィックはルーターを通過する必要があります。ルーターは、前述のように、適切なルートをすでに認識しています。非常に明確にしたい場合は、問題のホストのルーティングテーブルに静的ルートを追加して、VPNのリモート側への正しいルートを認識していることを確認します。

1
Joel E Salas

VPNが期待どおりに機能していることを確認するには、FreeBSDボックスからVPNトンネルの反対側にpingを実行することから始めます。

ping 98.158.118.1

VPNに問題がないことを確認した後の主な問題は、内部インターフェイスからgn0インターフェイスに着信するすべてのトラフィックを「ルーティング」し、このインターフェイスでもNATを実行することです。これはできません。 VPNはパケットをISP経由でルーティングする必要があるため、デフォルトのルーターを変更するだけで、または足元で撃たれます;)

ここでの単語は "divert"ですが、私が知る限り( " PFサポートはIPFWのように迂回しますか? "を参照)、これは現在のFreeBSDではサポートされていません。 pf "ポート(このポートは、オリジナルであるため、常にOpenBSD" pf "よりも古いです)。多分将来...

「pf」から「ipfw」に変更することを意味するソリューションのいくつかのヒントは次のとおりです。これは「divert」をサポートします。

  • FreeBSDの公式ipfwドキュメント を読んでください。これは次のステップの良いスタートです。
  • 「ipfw」および「divert」を有効にしてカーネルを再構築します(「ipfw」ドキュメントの31.6.2章)
  • 「ipfw」を有効にし、「/ etc /rc.conf」ファイルから「natd」出力インターフェイスを設定します。

    firewall_enable="YES"
    firewall_script="/etc/rc.firewall-myown"
    natd_enable="YES"
    natd_flags="-f /etc/natd.conf"
    natd_interface="ng0"
    
  • 独自の「/etc/rc.firewall-myown」を作成します(デフォルトの「/etc/rc.firewall」を開始点として使用できます)。

    ipfw -f flush 
    ipfw add 10002 divert natd all from any to any via em2
    ipfw add 10003 divert natd all from any to any via em3
    ipfw add 10004 divert natd all from any to any via em4
    

「natd」デーモンの構成は非常に単純で、主にポート転送を設定するために使用されます。

私はすべてをチェックしませんでした。特に、NATへの3つのインターフェースがあるという事実ですが、私は自分のFreeBSDルーティングボックスに「ipfw」を使用し、過去にVPNの迂回を行いました。

楽しい !

0
Ouki

FreeBSDにipコマンドがあるかどうかはわかりませんが、これを実現するのに似たものが最もあります。

# create special routing table
echo 7 special >> /etc/iproute2/rt_tables
# add default route for special table
ip route add table special default via 98.158.118.1
# see special table
ip route show table special
# add source based routing rule
ip rule add from 10.0.1.10/32 table special
# + add your nat rules unless the other end knows how to route back
# to your 10.0.1.0/24 network

@see IPレイヤーネットワーク管理者ガイド(Linux)

0
Manwe