所以,我已經為此苦惱了相當長一段時間了。
我有以下配置:
- 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
- IP電話與Raspberry PI在同一本地網絡,本地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 作為預設網關,它們無需額外努力即可到達伺服器,只需確保伺服器可以返回手機,在伺服器上新增 192.168.0.0/ 的路由(如有必要) 24(根據需要進行調整)透過Pi。