問題の結論

問題の結論

問題の結論

以下は、Linuxシステムのルーティングテーブルです。

root@computer:~# ip route show
default via 192.168.1.1 dev eth0 
10.0.0.200 dev tun0  proto kernel  scope link  src 10.0.0.100

宛先IPが1.2.3.5のこのコンピュータのtun0に送信されたパケットは、eth0では送信されません。

私が作りたいものの詳細な説明

このプロジェクトの目的は、私のコンピュータの1つ(および今後より多くのコンピュータ)にパブリックIPアドレスを提供することです。 2つの要件があります。

  • このコンピュータは、私が制御できないNATの背後にあります。
  • LAN上の他のコンピュータが(相対的に)遅いインターネットを介してアクセスしたくありません。

建築学

これは私が使用するアーキテクチャです。ここに画像の説明を入力してください。

コンピュータ:

  • A:インターネット上の任意のコンピュータがコンピュータFに接続しようとしています。
  • B:E経由でFにルーティングしたい追加のIP(1.2.3.5)があります。
  • C:私の制御下ではありません。
  • D:私のルータには固定ルートがあります:1.2.3.5 ---> 192.168.1.3
  • E:Bを使用してSSH TUNを設定し、1.2.3.5に向けられた受信パケットをデフォルトゲートウェイDにルーティングします。
  • F:他のすべてのコンピュータ(私のLANにいてもインターネットにいても)が1.2.4.5を介してアクセスしたいサーバー

設定

B、E、FでIP転送を設定します。

echo 1 > /proc/sys/net/ipv4/ip_forward

/etc/sysctl.confがE:に修正されました。

net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0

EでSSH TUNを設定する:

ssh -w 0:0 1.2.3.4

E: で tun0 インターフェイスを起動します。

ip link set tun0 up
ip addr add 10.0.0.100/32 peer 10.0.0.200 dev tun0

Bでtun0インターフェイスを起動します。

ip link set tun0 up
ip addr add 10.0.0.200/32 peer 10.0.0.100 dev tun0

これで、次のようにBからEを正常にpingできます。

ping 10.0.0.100

次のコマンドを使用して、BのインターフェイスからIP 1.2.3.5を削除します。 ifconfig venet0:1 0.0.0.0

Bにルートを追加する:ipルート10.0.0.100 dev tun0を介して1.2.3.5/32を追加する

次のコマンドを使用して、FのインターフェイスにIPを追加します。 ip addr add 1.2.3.5 dev eth0

テスト

A で、次のコマンドを実行してパケット転送をテストします。

netcat -u 1.2.3.5 4444

Eで次のコマンドを実行して、パケットが受信されたことを確認します。

root@computer:~$ tcpdump -n -i tun0 port 4444
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type RAW (Raw IP), capture size 262144 bytes
13:48:21.034003 IP 4.3.2.1.44312 > 1.2.3.5.4444: UDP, length 5


root@computer:~$ tcpdump -n -i eth0 port 4444
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
13:48:21.034061 IP 4.3.2.1.44312 > 1.2.3.5.4444: UDP, length 5

Eで次のコマンドを実行します。

root@computer:~# netcat -u 1.2.3.5 4444
test

Fで次のコマンドを同時に実行します。

root@computer:~# nc -ul 4444
test

質問

私が直面している問題は、コンピュータ(E)の1つが特定のIP(1.2.3.5)のIPパケットを受信しますが、それをデフォルトゲートウェイに転送しないことです。

私が見逃したのは、tun0インターフェイスからの着信パケットをeth0インターフェイスのデフォルトゲートウェイにルーティングするEのコマンドだと思います。

私がどんな命令を逃したのか知っている人はいますか?

ベストアンサー1

Celadaが提案した無効化によって解決されたルーティングの問題リバースパスフィルタリング/etc/sysctl.conf ファイルを変更して

net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0

この設定を完了するには、ISPのアップストリーム逆方向パスフィルタリングを避けるために、パケットをEとBを介して再ルーティングする必要があることに気づきました。

おすすめ記事