Tun0デバイスを作成し、172.16.1.0/24サブネット宛てのパケットをこのデバイスから読み取ることができるようにルートを設定するプログラム(私が作成)があります。私は今、反対方向に進んで、によって受信できるtunデバイスにパケットを書き込もうとしています。
私の最初の努力は、送信元と宛先のアドレスとポートを変更するだけでうまくいきました。私は以下を実行することができます:
nc -u -s MY_IP -p 4001 172.16.1.3 4000
そして私の入力はエコーされます。
実際に最初から出力パケットを生成するという私の2番目の取り組みは、現在失敗しています。
走れる tcpdump -i tun0
そして私が書いたパケットを見てください:
11:30:14.433489 IP (tos 0x0, ttl 32, id 0, offset 0, flags [none], proto UDP (17), length 56) 172.16.1.2.54167 > Ubuntu-dbacher.local.4011: [udp sum ok] UDP, length 28
しかし、私のリスナー(nc -l -u -s MY_IP -p 4011
)何も表示されません。
Tun0デバイスがパケットをルーティングするのを妨げている何かが間違っていると思われますが、パケットがドロップされている場所を可視化する方法がわかりません。
$ ifconfig tun0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:172.16.1.1 P-t-P:172.16.1.1 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
172.16.1.0 172.16.1.1 255.255.255.0 UG 0 0 0 tun0
10.10.48.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0
0.0.0.0 10.10.48.1 0.0.0.0 UG 0 0 0 eth0
$ cat /proc/sys/net/ipv4/ip_forward
1
Tunパケットがドロップされている場所をデバッグするにはどうすればよいですか?
(ところで、すべてのパケットはUDPです。)
ただの予感-Linuxはパケットルーティングを許可していますか?
run cat/proc/sys/net/ipv4/ip_forward-0の場合は1が表示されるはずです。run:
echo 1 > /proc/sys/net/ipv4/ip_forward
また、iptablesも確認してください。最初は、おそらくFORWARDチェーンのACCEPTが必要です。
iptables -P FORWARD ACCEPT
iptables -F FORWARD
ルーティング/ファイアウォールのトラブルシューティングを行うとき、私はほとんどの場合[あなたが言及した] tcpdumpを使用します。
多分これは役立ちます:
ip route get 198.51.100.1
または:
ip route get to 198.51.100.1 from 192.168.0.2 iif eth0
このソース: http://www.microhowto.info/troubleshooting/troubleshooting_the_routing_table.html