为了从互联网登录到我家用路由器上运行的 SIP 服务器(192.168.1.1
),由于多种原因,该服务器只能从我的 LAN 内访问,有人向我建议设置路由的 OpenVPN 服务器。
通过这种方式,理论上我可以欺骗我的路由器,让它认为来自远程设备(即通过 Android 客户端应用程序的手机)的流量来自我自己的 OpenVPN 服务器。由于服务器将在连接到我的 LAN 的 PC 上运行(在我的情况下是192.168.1.3
),这可以有效地让我从手机登录到 SIP 服务器。
我在 Linux Mint(Ubuntu)台式电脑上安装了 OpenVPN:
$ uname -a
Linux lorenzo-desktop 3.13.0-37-generic #64-Ubuntu SMP Mon Sep 22 21:28:38 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
并按照官方的操作指南和我在其他地方找到的一些信息,我得到了这个server.conf
文件(仅显示相关部分):
port 1194
proto udp
dev tun
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 192.168.1.0 255.255.255.0"
persist-key
persist-tun
topology subnet
另一位用户建议我(马里乌斯·马图蒂亚)添加以下内容iptables规则:
sudo iptables -t nat -A POSTROUTING -o eth0 ! -d 10.8.0.0/24 -j MASQUERADE
我还在托管服务器的 PC 上启用了 IP 转发,并在家用路由器上正确设置了端口转发。这样做之后,服务器应该可以正常工作,但事实却发生了以下情况:
- 我可以登录到正在运行的 OpenVPN 服务器
192.168.1.3
,它会为我的远程客户端分配 IP10.8.0.6
; - 我可以 ping 通我的 LAN 上的任何设备,其中包括
192.168.1.1
运行 SIP 服务器的调制解调器/路由器; - 我可以成功登录到 SIP 服务器(所以我想象我的手机和路由器之间一定存在某种握手);
- 我可以通过手机呼叫连接到 SIP 服务器的其他设备,它们也可以听到我的声音,但是我听不到他们应该发出的声音。
这是的输出ip route show
:
default via 192.168.1.1 dev eth0 proto static
10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.1
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.3 metric 1
来自ip link show dev tun0
:
3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 100
link/none
最后,您可以在这里找到tcpdump -i eth0
以及来自tcpdump -i tun0
。
我的问题:谁能猜出哪里出了问题?缺少软件包?服务器配置不正确?缺少iptables条目?
编辑#1:
不幸的是我无法为我的路由器添加路由;如果它有用的话,它的型号是 Technicolor AG Plus。它没有太多的黑客空间,你知道,我很幸运它支持 DDNS。
这是唯一活跃的iptables托管 OpenVPN 服务器的 PC 上的规则:
# iptables -vL -t nat
[...]
Chain POSTROUTING (policy ACCEPT 25 packets, 1672 bytes)
pkts bytes target prot opt in out source destination
61 3949 MASQUERADE all -- any eth0 anywhere !10.8.0.0/24
网络配置回顾
- [
192.168.1.1
]是我 ISP 提供的调制解调器/路由器,用于连接互联网;这是一个相当简陋的设备,无法设置路由,也没有 VPN 功能。它运行SIP 服务器我想要連接。 - [
192.168.1.2
]是我用作网络扩展器的路由器。它的设置方式使其对通过它的流量完全透明。到目前为止,我没有遇到任何问题,我真的不认为它对我的问题有任何影响。许多 SIP 客户端通过它连接,并且可以成功拨打和接听电话。 - [
192.168.1.3
]是一台运行 Linux Mint 的 PC,通过以太网电缆连接到192.168.1.2
,运行OpenVPN 服务器。在VPN中,其地址是[10.8.0.1
]。我的家用路由器 (192.168.1.1
) 将端口 1194 上的传入流量转发到该设备。 - 我的智能手机使用 3G 蜂窝网络连接到互联网。它可以连接到 OpenVPN 服务器并获取地址,例如[
10.8.0.6
]。它可以登录到正在运行的 SIP 服务器,192.168.1.1
但我有单向音频,从智能手机到目标 SIP 设备。