这是我的简要设置:
- Xbox360
- 运行 ArchLinuxARM 的 Raspberry PI 2(警报)
- 树莓派的主以太网端口有一根电缆直接连接到我的主路由器
- xbox 有一根交叉电缆连接到树莓派上的以太网转 USB
- 我正在使用 openvpn systemd 服务(创建设备
tun0
)
我购买了一个 VPN 帐户,并希望通过它路由我的 xbox 360 流量。之后正在做 研究,我能够使用我的树莓派作为路由器来获取我的 xbox。我的树莓派通过 连接到网络/互联网eth0
,并且有一条交叉电缆通过 连接到我的 xbox eth1
。
eth0
具有 的静态 IP 10.0.0.31
,eth1
具有 的静态 IP 10.0.1.100
,并且 xbox 具有 的静态 IP 10.0.1.101
。
这是我的 iptables 配置:
# Generated by iptables-save v1.4.21 on Mon Apr 6 00:37:36 2015
*filter
:INPUT ACCEPT [91:6512]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [45:4220]
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth1 -o eth0 -j ACCEPT
-A FORWARD -d 10.0.1.101/32 -i eth0 -p tcp -m tcp --dport 3074 -j ACCEPT
-A FORWARD -d 10.0.1.101/32 -i eth0 -p udp -m multiport --dports 88,3074 -j ACCEPT
COMMIT
# Completed on Mon Apr 6 00:37:36 2015
# Generated by iptables-save v1.4.21 on Mon Apr 6 00:37:36 2015
*nat
:PREROUTING ACCEPT [8:3607]
:INPUT ACCEPT [2:144]
:OUTPUT ACCEPT [1:86]
:POSTROUTING ACCEPT [2:146]
-A PREROUTING -i eth0 -p tcp -m tcp --dport 3074 -j DNAT --to-destination 10.0.1.101
-A PREROUTING -i eth0 -p udp -m multiport --ports 88,3074 -j DNAT --to-destination 10.0.1.101
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
# Completed on Mon Apr 6 00:37:36 2015
我的 xbox 配置是(顺便说一下,使用 google dns):
- IP 设置:手动
- IP地址:
10.0.1.101
- 子网掩码:
255.255.255.0
- 网关:
10.0.1.100
- DNS 设置:手动
- 基本的:
8.8.8.8
- 次要的:
8.8.4.4
当我的 VPN 连接关闭时,这可以完美运行。
当我打开 openvpn 服务时,xbox 将不再连接到互联网(显示 DNS 错误),但是,Raspberry Pi 仍然能够上网,并且我可以确认我已成功通过 VPN 路由。
当 VPN 关闭时,Xbox 可以正常连接到互联网并按预期工作。
我不太熟悉 IP 表和这个通用路由设置,不知道是否正在生成日志,问题出在我的 iptables 配置、xbox 还是其他什么。
有什么想法可以解决这个问题吗?
更新:
我已经将另一台 Linux 笔记本电脑(如果重要的话,它正在使用 NetworkManager)连接到eth1
,配置如下:
- IPv4 方法:手动
- DNS 服务器:
10.0.0.1
- IP地址:
10.0.1.101
- 网络掩码:
255.255.255.0
- 网关:
10.0.1.100
当 vpn 连接关闭时,我可以正常使用互联网。当 vpn 开启时,我可以正常访问 LAN(甚至可以使用其10.0.0.31
IP 地址通过 ssh 进入 raspberry pi),但是 DNS 不起作用,我也无法 ping 外部地址。
我应该设置一组日志来准确了解正在发生的事情吗?
更新 #2:
我在用这个 arch linux 包对于 OpenVPN 配置文件,并配置一个文件用于自动登录。我注意到它会触发一个以某种方式修改 resolv.conf 的脚本,这可能正在做某事。
答案1
我最终发现另一位导游,针对我想要路由的各种服务稍微修改了 iptables。
最终生成的文件如下所示:
filter
# Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
# Accepts all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Forward all data related to our requests
-A FORWARD -j ACCEPT -m state --state ESTABLISHED,RELATED
# Allows all outbound traffic
# You could modify this to only allow certain traffic
-A OUTPUT -j ACCEPT
# Allows HTTP and HTTPS connections from anywhere (the normal ports for websites)
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
-A INPUT -p tcp --dport 22 -j ACCEPT
# Allow Transmission daemon from anywhere, with default ports
-A INPUT -p tcp --dport 9091 -j ACCEPT
-A INPUT -p tcp --dport 51413 -j ACCEPT
# Allows SSH connections (change the port number if you need to)
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
# Allow ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
# log iptables denied calls (access via 'dmesg' command)
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
# Reject all other inbound - default deny unless explicitly allowed policy:
-A INPUT -j REJECT
COMMIT
*nat
:PREROUTING ACCEPT [1:148]
:INPUT ACCEPT [1:148]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o tun0 -j MASQUERADE
COMMIT
其中一些只是猜测,我相信它可以被优化/改进,但这对我来说是暂时有效的,并且更加通用(没有特定的 IP,等等)。
这确实稍微修改了我的设置;现在我通过 wifi 连接我的 xbox,并且可以手动将我的网关设置为 raspberry pi 的静态 ip;它对 xbox、我的笔记本电脑、手机等都很有用。只需添加新的网络配置文件,我就可以毫无困难地打开和关闭 vpn 连接。