web-dev-qa-db-ja.com

xl2tpdとracoonを使用したVPN-デフォルト以外のIPアドレスからのトラフィックをNATトラフィックする方法

私は次のようなネットワークを持つDebianを実行しているサーバーを持っています:

eth0 - has public IP address 1.2.3.4
eth1 - has public IP address 1.2.3.5

Android電話から接続できるサーバーにVPNをセットアップしようとしています。 http://wiki.debian.org/)の指示に従いました。 HowTo/AndroidVPNServer xl2tpdとracoonをインストールして構成します。すべて機能しますが、最後に調整したいことが1つあります。それは、電話をVPNに接続するときに、電話からのトラフィックの元となるパブリックIPアドレスです。 routedはeth0、つまり1.2.3.4のものです。VPNトラフィックをeth1のIPアドレス(1.2.3.5)の背後でNAT化する必要があります(理想的には、VPNクライアントは1.2.3.4に接続し続けます)。

私のファイアウォールルールは次のようになります。

VPN_CLIENT_RANGE=192.168.200.0/24
iptables -A INPUT -p udp --dport 500 -j ACCEPT
iptables -A INPUT -p udp --dport 4500 -j ACCEPT
iptables -A INPUT -p esp -j ACCEPT
iptables -A INPUT -p udp -m policy --dir in --pol ipsec -m udp --dport 1701 -j ACCEPT
# Enable VPN traffic on the ppp+ adapters (only active when a call is established)
# to go through the machine using SNAT/masquerading.
iptables -A FORWARD -i ppp+ -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o ppp+ -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -s $VPN_CLIENT_RANGE -j MASQUERADE

最後の3行でeth0をeth1に変更すると正しい効果が得られることを期待していましたが、そうではありません-VPNクライアントは接続できますが、インターネットを見ることができなくなり、ログにはVPNクライアントからのトラフィックが表示されます(サーバー)はまだeth0から送信されています(ファイアウォールは最後の3行なしでブロックします)。

どういうわけかpppdで送信元アドレスを設定する必要がありますか?または、pppインターフェースのデフォルトルートを変更しますか?

1
David North

私はそれを解決しました。

クライアントがVPNに接続すると、PPP接続が確立されます。

パケットは、クライアントからサーバー上のpppNインターフェイスに流れます。それらが「間違った」IPアドレスを介してそこからインターネットに流れる原因は、サーバーのデフォルトのルーティングテーブルです。

$ ip route show
default dev eth0 scope link

つまり、すべてのアウトバウンドトラフィックはeth0を経由します。

デフォルトルートを変更したくないと仮定すると、必要なのは、eth1を介したデフォルトルートで別のルーティングテーブルを作成し、VPNにそれを使用させることです。

新しいテーブルのエントリを/ etc/iproute2/rt_tablesに追加します。

101 vpn

番号はファイル内で一意であれば何でもかまいません。名前は、手元の仕事を説明するものです。

次に、eth1経由のデフォルトルートをこのテーブルに追加します。

# ip route add table vpn default dev eth1 scope link

最後に、(pppNインターフェイス上の)着信VPNトラフィックを新しいテーブルに従ってルーティングするように強制します。最も簡単な方法は、/ etc/ppp/ip-up.dおよびip-down.dメカニズムを使用して、pppインターフェイスが起動および停止するときにルールを追加および削除することです。

/etc/ppp/ip-up.d/vpn-routing:

#!/bin/sh
IF=$1
ip rule add dev $IF table vpn

/etc/ppp/ip-down.d/vpn-routing:

#!/bin/sh
IF=$1
ip rule delete dev $IF table vpn

これらすべてを再起動後も存続させるには、起動時に実行されるものに「iprouteadd」行を配置する必要があります。ファイアウォールスクリプト-またはeth0の/ etc/network/interfacesの「up」行として。

0
David North