簡単に言うと、ルーターの背後で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サーバーに接続した直後です。
私の/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
ここでの重要な質問は、「VPNをもう試しましたか?」です。すべてが順調に見えます。 FreeBSDボックスがすでにVPNのリモート側にルーティングできる場合、作業はほぼ完了しています。これは、接続が有効であり、リモートネットワークへのルートを認識していることを意味します。
ルーターの背後にあるホストは、「VPNを介して」通信するために変更をまったく必要としないはずです。ルーターがデフォルトゲートウェイとして設定されている場合、リモートネットワーク(VPNの反対側を含む)へのすべてのトラフィックはルーターを通過する必要があります。ルーターは、前述のように、適切なルートをすでに認識しています。非常に明確にしたい場合は、問題のホストのルーティングテーブルに静的ルートを追加して、VPNのリモート側への正しいルートを認識していることを確認します。
VPNが期待どおりに機能していることを確認するには、FreeBSDボックスからVPNトンネルの反対側にpingを実行することから始めます。
ping 98.158.118.1
VPNに問題がないことを確認した後の主な問題は、内部インターフェイスからgn0インターフェイスに着信するすべてのトラフィックを「ルーティング」し、このインターフェイスでもNATを実行することです。これはできません。 VPNはパケットをISP経由でルーティングする必要があるため、デフォルトのルーターを変更するだけで、または足元で撃たれます;)
ここでの単語は "divert"ですが、私が知る限り( " PFサポートはIPFWのように迂回しますか? "を参照)、これは現在のFreeBSDではサポートされていません。 pf "ポート(このポートは、オリジナルであるため、常にOpenBSD" pf "よりも古いです)。多分将来...
「pf」から「ipfw」に変更することを意味するソリューションのいくつかのヒントは次のとおりです。これは「divert」をサポートします。
「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の迂回を行いました。
楽しい !
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