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だと開発者コンソールがないので何もわからないことが分かった。つらい…