所以,我已经为这个问题苦思冥想了很长时间了。
我有以下配置:
- OpenVPN 服务器,IP 1.2.3.1
- Asterisk 服务器,连接到 OpenVPN 服务器,IP 1.2.3.3
- Raspberry PI,本地接口 192.168.0.17,连接到 OpenVPN IP 1.2.3.6
- 与Raspberry PI在同一个本地网络中的IP电话,本地ip 192.168.0.81
网络配置如下:
- 树莓派上的本地连接是eth0
- Raspberry 有额外的虚拟接口 eth0:1,其 IP 为 192.168.0.91
- 树莓派上的 OpenVPN 连接是 tun0
- 电话的本地 IP 为 192.168.0.81,网关设置为 192.168.0.91(树莓派)
在树莓派上,iptables如下:
#Empty all routing tables
sudo iptables -t nat -F
sudo iptables -F
#Masquerade all traffic leaving tun0 as if coming from 1.2.3.6
sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
#redirect all traffic coming from eth0:1 to tun0
sudo iptables -A FORWARD -i eth0:1 -o tun0 -j ACCEPT
#redirect all traffic coming from tun0 to eth0:1
sudo iptables -A FORWARD -i tun0 -o eth0:1 -j ACCEPT
#Modify all packets coming to tun0 to forward then to the IP telephone
sudo iptables -t nat -A PREROUTING -i tun0 -j DNAT --to-destination 192.168.0.81
因此,我可以拨打电话,也可以接听电话(我有另一台笔记本电脑直接连接到 VPN 服务器并使用 Zoiper 进行测试)。我可以拨打电话,也可以从电话拨打电话,并且从电话到笔记本电脑的音频可以正常工作,但电话上根本没有传入音频。
我究竟做错了什么?
更新
我也尝试了以下
手机的设置是 192.168.200.1 / 255.255.255.0,连接到的树莓派的设置是 192.168.200.2 / 255.255.255.0(树莓派的 IP 是手机的网关)
Raspberry pi 的 tun ip 为 10.34.87.2(使用 wlan0 连接到 wifi,然后连接到 vpn)。
IP表
sudo iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT sudo iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
在VPN服务器上(10.34.87.1)
route add 192.168.200.0/24 10.34.87.2
注意:iptables 没有伪装。现在我设法将流量从 192.168.200.1 路由到 10.34.87.1(vpn 服务器),但不能反过来。
有任何想法吗?
答案1
伪装是必需的吗?如果不是,由于您的手机将 Pi 作为其默认网关,因此它们可以毫不费力地访问服务器,只需确保服务器可以访问手机,在服务器上通过 Pi 为 192.168.0.0/24 添加路由(如果需要)(根据需要进行调整)。