
PS3 で日本のカラオケ ゲームをプレイしようとしているのですが、遅延がひどく、曲のダウンロードに非常に時間がかかります。私が受けたアドバイスの 1 つは、OpenSSH 経由で日本の友人のサーバーにログインして、ラップトップを SOCKS プロキシに変えるというものでした。
[サーバー]----(ssh トンネル)---[wlan0 < ラップトップ > eth0]---[PS3]
そこで私はこうしました:
ssh -ND 4711 [email protected]
その時、私は Firefox (SOCKS プロキシ設定) を使用してラップトップから google.com にアクセスしようとしましたが、google.co.jp にリダイレクトされました。すばらしい。
次に、PS3 をイーサネット経由でラップトップに接続したいと思いました。
まず、eth0 に静的 IP を割り当てました:
ip link set dev eth0 up
ip addr add 139.96.30.100/24 dev eth0
次に、PS3 に IP を割り当てるために、ラップトップで DHCP サーバーを起動しました。
systemctl start dhcp4.service
そして最後に、iptables マジックを使って NAT を有効にしました。
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
「ネットワーク設定」に行き、PS3 からの接続をテストしたところ、うまくいったようです。Web ブラウザを起動すると、google.com が google.fr にリダイレクトされました。なんて愚かなことでしょう。接続を正しいポートに転送するのを忘れていました。
iptables 経由で接続を何度も転送したがうまくいかなかったので、透過プロキシである redsocks を使ってみることにしました。出典:http://darkk.net.ru/redsocks/
インストール後、ニーズに合わせて /etc/redsocks.conf を変更しました。
redsocks {
local_ip=0.0.0.0; // documentation says: "use 0.0.0.0 if you want to listen on every interface"
local_port=31388;
ip=127.0.0.1;
port=4711;
}
残りはそのまま残してhttps://github.com/darkk/redsocks/blob/master/redsocks.conf.example
インストールしたパッケージで提供されている基本的な redsocks.rules を使用しました。
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:REDSOCKS - [0:0]
# Redirect all output through redsocks
-A OUTPUT -p tcp -j REDSOCKS
# Whitelist LANs and some other reserved addresses.
# https://en.wikipedia.org/wiki/Reserved_IP_addresses#Reserved_IPv4_addresses
-A REDSOCKS -d 0.0.0.0/8 -j RETURN
-A REDSOCKS -d 10.0.0.0/8 -j RETURN
-A REDSOCKS -d 127.0.0.0/8 -j RETURN
-A REDSOCKS -d 169.254.0.0/16 -j RETURN
-A REDSOCKS -d 172.16.0.0/12 -j RETURN
-A REDSOCKS -d 192.168.0.0/16 -j RETURN
-A REDSOCKS -d 224.0.0.0/4 -j RETURN
-A REDSOCKS -d 240.0.0.0/4 -j RETURN
# Redirect everything else to redsocks port
-A REDSOCKS -p tcp -j REDIRECT --to-ports 31338
COMMIT
これにより、Firefox と luakit の SOCKS プロキシ設定の使用を停止することができ、google.com が google.co.jp に変わるというテストで確認できました。
NAT を有効にする必要があると判断したので、やり直しました:
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
PS3 はシステム全体のプロキシをバイパスしたようで、google.com は google.fr にリダイレクトされました。そこで、マスカレードなしで redsocks.rules ファイルをそのまま使用しました。redsocks サーバーはすべてのインターフェースでリッスンしているようなので、NAT は必要ないだろうと考えました。
PS3 を再度接続しようとすると、次のメッセージが表示されました (PS3 が DHCP サーバーから IP を取得した後、インターネット接続に失敗しました)。
「サーバーとの通信中にエラーが発生しました。これは DNS エラーです。」
それが今私がいる場所です。ただし、ドキュメントによると、redsocks は dnstc という DNS サーバーを使用しており、これが次の動作をするため、redsocks に問題がある可能性があります。
dnstc {
// fake and really dumb DNS server that returns "truncated answer" to
// every query via UDP, RFC-compliant resolver should repeat same query
// via TCP in this case.
local_ip = 127.0.0.1;
local_port = 5300;
}
私の推測では、PS3 が UDP 経由で DNS 解決を要求し、dnstc が常に「切り詰められた回答」で応答しているようです。私の理解が正しければ、TCP 経由で要求を再送信する必要がありますが、代わりに DNS エラーが発生するようです。
どうすればいいでしょうか?もっと正確に言うと、
- redsocks は不要ですか? 私は iptables に疎いだけでしょうか?
- DNS サーバーをインストールして DNS 要求を転送する必要がありますか? その場合、どのようにすればよいですか?
長文を読んでくださりありがとうございます。初めての質問としては、あまりつまらない内容ではないといいのですが...
答え1
PS3を静的DNSサーバーを使用するように設定することもできます。オープンDNS、およびにサーバーがある208.67.222.222
、208.67.220.220
または試してくださいGoogle のパブリック DNS サーバーオン8.8.8.8
と8.8.4.4
。