与 PS3 共享透明代理互联网连接

与 PS3 共享透明代理互联网连接

我正在尝试在 PS3 上玩一款日本卡拉 OK 游戏,但延迟太可怕了,下载歌曲需要很长时间。我得到的一个建议是将我的笔记本电脑变成 SOCKS 代理,通过 OpenSSH 登录到我朋友在日本的服务器。

[服务器]----(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

然后我在笔记本电脑上启动了 DHCP 服务器,为 PS3 分配一个 IP:

systemctl start dhcp4.service

最后我使用一些 iptables 魔法启用了 NAT:

iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

我进入“网络设置”,测试了 PS3 的连接,看起来一切正常。我启动了网络浏览器,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 文件,没有伪装。我相信无论如何我都不需要 NAT,因为 redsocks 服务器显然会监听每个接口。

我尝试再次连接 PS3,但收到以下消息(PS3 从我的 DHCP 服务器获取 IP 后,无法获取互联网连接):

“与服务器通信时发生错误。这是 DNS 错误。”

这就是我现在的情况。不过我猜这可能是 redsocks 的问题,因为它使用一个名为 dnstc 的 DNS 服务器,根据文档,该服务器执行以下任务:

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.222208.67.220.220,或尝试Google 的公共 DNS 服务器8.8.8.88.8.4.4

相关内容