iPadから同じネットワークにいるPCにIPではなくドメイン名でHTTPリクエストをしたいのですが、シュッと雑なDNSを立てる方法ってなんかあったりするでしょうか? /etc/hostsに書くレベルのことでいいんですが、iPadはhostsを触らせてくれないみたいなので……
上の質問をruby-jpでしたら、rubydnsというものを教えてもらった。
example通りに次のようなコードを置くと、DNSサーバーが立った。べんり。
require 'rubydns' INTERFACES = [ [:udp, "0.0.0.0", 53], [:tcp, "0.0.0.0", 53], ] IN = Resolv::DNS::Resource::IN # Use upstream DNS for name resolution. UPSTREAM = RubyDNS::Resolver.new([[:udp, "8.8.8.8", 53], [:tcp, "8.8.8.8", 53]]) # Start the RubyDNS server RubyDNS::run_server(INTERFACES) do @logger.debug! match(%r{devkibe.la}, IN::A) do |transaction| transaction.respond!("192.168.1.3") end # Default DNS handler otherwise do |transaction| transaction.passthrough!(UPSTREAM) end end
iPadはDNSサーバーを指定する時にポート番号を指定すると(バリデーションエラーも何もなしに)無視するので、53番ポートでDNSサーバーは立てる必要がある。
そうすると当然root権限が必要なわけだけど、どうやらsetcap
コマンドを使うと必要な権限だけをコマンドに渡せるらしい。
sudo setcap CAP_NET_BIND_SERVICE+ep $(rbenv which ruby)
としてrubyに53番ポートをlistenする権限を与えるとうまくいった。
ただ、結局JavaScriptがうまく読み込めなくてアプリケーションを試すことができなかった。まあアプリケーション側の問題なので、直せば良いだけ。 ただ、iPadだと開発者コンソールがないので何もわからないことが分かった。つらい…