質問: curlでネットワークインターフェイスを指定します いくつかの理由で、イーサネット(osレベルのデフォルトルート)ではなく、wifiインターフェイスを介して要求をルーティングするプロキシサーバーをコーディングしたいと思います。私はosルートをいじることでそれができることを知っていますが、例えばカールで直接それをしたいと思います。ソケットが--interfaceオプションで使用するネットワークインターフェイスを実際に選択できることを読みましたが、私には機能しないようです:(私は以下を試しました:curl --interface wlp2s0 google.comしかし、私はetimedoutエラーだけを受け取ります。curl --interface enp0s20 google.com期待どおりに動作します。誰かが何が起こっているのか手掛かりがありますか?
回答: matt clarkが正しく指摘しているように、[〜#〜] etimedout [〜#〜]は、何らかの理由で指定されたサイトにアクセスできなかったことを意味します。ただし、-interfaceオプションの意味を誤って解釈していることも指摘しておきます。意味:2つ以上のインターフェースがある場合、デフォルトのインターフェースではなく、指定したインターフェースのipアドレスを使用します。しかし、ルーティングについてはie、どのインターフェースがリクエストを決定するかあなたが持っているルーティングテーブルに従って、あなたのコマンドではなく、決定するのはカーネルです(ルーティングテーブルがデフォルトゲートウェイを指定する場合) ethたとえば、--interface wlanを指定した場合でも、curlリクエストはそれを介してルーティングされます。これを確認しましょう:2つのtcpdumpセッションを設定しました。1つはイーサネットデバイス(sb)に、もう1つはwifiデバイス(wlan)に設定しました。 ;両方が接続されていますが、ルーティングテーブルにはsbを介したゲートウェイがあります。次に、3番目のシェルで、次のように2つのcurlリクエストを送信します。$ date && curl --interface usb0 146.255.36.1/plain mar 22 nov 2016, 18.44.21, cet <!-- pageok --> <!-- managed by puppet --> <html> <pre>pageok</pre> </html> $ date && curl --interface wlan0 146.255.36.1/plain mar 22 nov 2016, 18.44.44, cet <!-- pageok --> <!-- managed by puppet --> <html> <pre>pageok</pre> </html> これが私の2つのtcpdumpセッションの記録です:wifi上の1つ# tcpdump -i wlan0 -n host 146.255.36.1 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on wlan0, link-type en10mb (ethernet), capture size 262144 bytes とイーサネット上のもの# tcpdump -i usb0 -n host 146.255.36.1 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on usb0, link-type en10mb (ethernet), capture size 262144 bytes 18:44:21.118505 ip 192.168.73.74.52601 > 146.255.36.1.80: flags [s], seq 2178801514, win 29200, options [mss 1460,sackok,ts val 10527374 ecr 0,nop,wscale 7], length 0 18:44:21.147291 ip 146.255.36.1.80 > 192.168.73.74.52601: flags [s.], seq 95036242, ack 2178801515, win 14480, options [mss 1460,nop,nop,ts val 500605800 ecr 10527374,nop,wscale 8], length 0 18:44:21.147322 ip 192.168.73.74.52601 > 146.255.36.1.80: flags [.], ack 1, win 229, options [nop,nop,ts val 10527381 ecr 500605800], length 0 18:44:21.147375 ip 192.168.73.74.52601 > 146.255.36.1.80: flags [p.], seq 1:82, ack 1, win 229, options [nop,nop,ts val 10527381 ecr 500605800], length 81: http: get /plain http/1.1 18:44:21.175829 ip 146.255.36.1.80 > 192.168.73.74.52601: flags [.], ack 82, win 57, options [nop,nop,ts val 500605829 ecr 10527381], length 0 18:44:21.178222 ip 146.255.36.1.80 > 192.168.73.74.52601: flags [p.], seq 1:285, ack 82, win 57, options [nop,nop,ts val 500605832 ecr 10527381], length 284: http: http/1.1 200 ok 18:44:21.178236 ip 192.168.73.74.52601 > 146.255.36.1.80: flags [.], ack 285, win 237, options [nop,nop,ts val 10527389 ecr 500605832], length 0 18:44:21.178321 ip 192.168.73.74.52601 > 146.255.36.1.80: flags [f.], seq 82, ack 285, win 237, options [nop,nop,ts val 10527389 ecr 500605832], length 0 18:44:21.206618 ip 146.255.36.1.80 > 192.168.73.74.52601: flags [f.], seq 285, ack 83, win 57, options [nop,nop,ts val 500605860 ecr 10527389], length 0 18:44:21.206642 ip 192.168.73.74.52601 > 146.255.36.1.80: flags [.], ack 286, win 237, options [nop,nop,ts val 10527396 ecr 500605860], length 0 18:44:44.284057 ip 192.168.73.45.41804 > 146.255.36.1.80: flags [s], seq 2817430695, win 29200, options [mss 1460,sackok,ts val 10533165 ecr 0,nop,wscale 7], length 0 18:44:44.313090 ip 146.255.36.1.80 > 192.168.73.45.41804: flags [s.], seq 3652186052, ack 2817430696, win 14480, options [mss 1460,nop,nop,ts val 500628966 ecr 10533165,nop,wscale 8], length 0 18:44:44.313117 ip 192.168.73.45.41804 > 146.255.36.1.80: flags [.], ack 1, win 229, options [nop,nop,ts val 10533172 ecr 500628966], length 0 18:44:44.313152 ip 192.168.73.45.41804 > 146.255.36.1.80: flags [p.], seq 1:82, ack 1, win 229, options [nop,nop,ts val 10533172 ecr 500628966], length 81: http: get /plain http/1.1 18:44:44.342243 ip 146.255.36.1.80 > 192.168.73.45.41804: flags [.], ack 82, win 57, options [nop,nop,ts val 500628995 ecr 10533172], length 0 18:44:44.343076 ip 146.255.36.1.80 > 192.168.73.45.41804: flags [p.], seq 1:285, ack 82, win 57, options [nop,nop,ts val 500628996 ecr 10533172], length 284: http: http/1.1 200 ok 18:44:44.343090 ip 192.168.73.45.41804 > 146.255.36.1.80: flags [.], ack 285, win 237, options [nop,nop,ts val 10533180 ecr 500628996], length 0 18:44:44.343168 ip 192.168.73.45.41804 > 146.255.36.1.80: flags [f.], seq 82, ack 285, win 237, options [nop,nop,ts val 10533180 ecr 500628996], length 0 18:44:44.372262 ip 146.255.36.1.80 > 192.168.73.45.41804: flags [f.], seq 285, ack 83, win 57, options [nop,nop,ts val 500629025 ecr 10533180], length 0 18:44:44.372302 ip 192.168.73.45.41804 > 146.255.36.1.80: flags [.], ack 286, win 237, options [nop,nop,ts val 10533187 ecr 500629025], length 0 ^c 20 packets captured 20 packets received by filter 0 packets dropped by kernel 通知: 各リクエストに対応するタイムスタンプ、 異なるlanipアドレス、イーサネットの場合は192.168.73.74、wifiの場合は192.168.73.45。 そのallパケットは、イーサネットインターフェイス上のtcpdumpセッションによって、--の選択に関係なく検出されますインターフェイス。 あなたは尋ねるかもしれません:それで、-interfaceオプションはいつ役に立ちますか? 2つ(またはそれ以上)のルーティングテーブルがあり、各インターフェースに1つずつあり、それぞれに独自のgatewayがあります。次に、-interfaceを使用すると、curlの宛先に到達するために使用するインターフェイスを指定できます。 ポリシールーティングの設定方法について詳しく知りたい場合は、 ここ をお読みください。