
我正在嘗試在 PS3 上玩日本卡拉 OK 遊戲,但延遲非常可怕,而且下載歌曲需要很長時間。我得到的一個建議是透過 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
然後,我在筆記型電腦上啟動了 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 錯誤?
我該怎麼辦?或者更準確地說:
- 紅襪有必要嗎?我只是 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
。