与 PS3 共享透明代理的 Internet 连接

pao*_*aob 7 linux ssh ps3 socks-proxy iptables

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

[服务器]----(ssh 隧道)---[wlan0 <laptop> eth0]---[PS3]

所以这就是我所做的:

ssh -ND 4711 login@friend.server
Run Code Online (Sandbox Code Playgroud)

在那一刻,我尝试使用 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
Run Code Online (Sandbox Code Playgroud)

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

systemctl start dhcp4.service
Run Code Online (Sandbox Code Playgroud)

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

iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
Run Code Online (Sandbox Code Playgroud)

我转到“网络设置”并测试了我的 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;
}
Run Code Online (Sandbox Code Playgroud)

其余的被忽略了,就像在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
Run Code Online (Sandbox Code Playgroud)

这让我可以停止在 Firefox 和 luakit 上使用 SOCKS 代理设置,我在 google.com 变成了 google.co.jp 测试时确认了这一点。

我想我仍然必须启用 NAT 所以我重做了:

iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

我的猜测是,我的 PS3 通过 UDP 请求 DNS 解析,而 dnstc 一直以“截断的答案”回复。如果我理解正确,它应该通过 TCP 重新发送请求,但显然它会产生 DNS 错误?

我该怎么办?或者更准确地说:

  • redsocks 是不必要的吗?我只是 iptables 文盲吗?
  • 我应该安装 DNS 服务器并转发 DNS 请求吗?如果是这样,如何?

感谢您阅读那面文字墙!希望第一个问题不会太糟糕......

Jar*_*ard 2

您可以将 PS3 设置为使用静态 DNS 服务器。您可以尝试OpenDNS,它的服务器位于208.67.222.222208.67.220.220,或者尝试Google 的公共 DNS 服务器位于8.8.8.88.8.4.4