次の問題は、私が問題を抱えているより大きなソリューションのほんの一部です。他のすべての要素はこれまでのところ機能しているようですので、私が問題を抱えている非常に小さな部分について説明します。
Linuxマシンを持っています。tun0(トンネリングインターフェイス)とeth0(witchは私のインターネットへのデフォルトゲートウェイです)を持っています。
目標:私の目標は、tun0から着信するパケットを受信し、それらをデフォルトゲートウェイに転送することです。したがって、実際には非常に単純なNATのケースであり、物理インターフェイスを偽装したtun0とインターネットを「共有」したいと考えています。
Tunは、
sudo openvpn --mktun --dev tun0 --user USER
sudo ip addr add 10.2.0.1/24 dev tun0
sudo ip link set tun0 up
だから私はそれを稼働させ、pingを実行することができます。さらに、このTUNデバイスに接続し、読み取りと書き込みができるC ++アプリケーションがあります。(fti:ここに私がフォローしたチュートリアルがあります:http : //backreference.org/2010/03/26/tuntap-interface-tutorial/)
8.8.8.8に対して行われた正しいICMP(ping)要求をC ++のバイト配列にダンプしました。次に、私のプログラムを使用して、それをtun0デバイスに書き込みます。ICMPリクエストは
- ソース(10.2.0.10)-カーネルはルートを戻します(同じサブネット)
- 宛先(8.8.8.8)-GoogleのDNS
- 正しいチェックサムなど(Wireshark / TSharkでは、tun0で正しく表示されます)
次に、私は以下のルートを持っています:
iptables -F # flush
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables --append FORWARD --in-interface tun0 -j ACCEPT
そしてここで私は行き詰まっています:(パケットはデフォルトのgwに転送されません(tsharkは受信したtun0でのみそれを認識しますが、これは正しいと思います)
何が欠けていますか?多分いくつかの代替アプローチ(ただし、tunデバイスを使用して行う必要があり、それにr / wを実行できる必要があります)。追加情報:
- 転送が有効になっている(/ proc / sys / net / ipv4 / ip_forward)
- 8.8.8.8はeth0から到達可能(ローカルから)
- デフォルトゲートウェイが正しい(ISPからeth0経由)
- rp_tables(echo 0> / proc / sys / net / ipv4 / conf / eth5 / rp_filter)をオフに切り替えてみました
- その他多数...
ヒントを事前にありがとう!