我使用 TAP(而不是 TUN)设备在家庭网络上设置了一个 OpenVPN 服务器,这样远程连接到网络的客户端就会桥接到与我的(有线)家庭网络相同的子网。
但是,我有一台笔记本电脑,我在家里使用以太网连接,在其他地方使用 WiFi(我尽量不在家里使用 WiFi——在拥挤的曼哈顿公寓楼里,这是一场灾难)。我还喜欢为网络上的每个设备设置固定的 IP 地址,因此我修复了其以太网适配器的 IP 配置,并在连接到 VPN 时为 TAP 设备使用相同的 IP(使用客户端配置目录在服务器端)。
有没有一种好的、最少黑客攻击的方法来配置笔记本电脑上的 OpenVPN 服务,使其仅在以太网连接未激活时连接到 OpenVPN?让 OpenVPN 服务自动在后台运行非常方便,我不想每次连接到以太网时都手动关闭它,但让它尝试使用我已经使用的相同 IP 地址通过 VPN 连接到我已经物理连接的同一网络显然不是一个好主意……
我确信我可以使用 init 脚本来破解一些东西,但我想尽可能减少与官方 Ubuntu 配置的差异。如果有人能想到更“合适”的方法,我将不胜感激。
答案1
我尝试了一下,找到了一个适合我的配置的解决方案。这不是一个完全通用的解决方案,所以希望有人能提出一个更强大的解决方案。
sudo ufw allow ...
当我使用以太网时,我没有禁用笔记本电脑上的 OpenVPN,而是在网络的 OpenVPN 服务器上配置了 ufw(简单防火墙)来拒绝来自本地子网的连接;不过,这比仅仅使用和创建规则要复杂一点sudo ufw deny ...
:
首先,如果您在将 VPN 桥接到本地网络的机器上运行 ufw(我正在这样做),则需要将 ufw 配置为允许转发流量,因为它默认会丢弃该流量。这意味着在 中更改
DEFAULT_FORWARD_POLICY="DROP"
为。DEFAULT_FORWARD_POLICY="ACCEPT"
/etc/default/ufw
其次,您需要确保按正确的顺序添加规则;ufw 逐个处理规则,并使用您拒绝在子网内连接到 OpenVPN(端口 1149)的规则,然后才允许它们从外部连接(前提是您按该顺序创建它们);在我的例子中,这意味着在
sudo ufw delete deny from 192.168.16.0/20 to any port 1194
运行之前先运行(不,这不是打字错误,我实际上在本地使用 /20 子网:D)sudo ufw allow 1194
。最后,你需要确保来自本地网络的连接确实做看起来它们来自您的本地网络,因此调用 ufw 规则。
最后一部分很重要,因为最初我尝试前两个步骤时情况并非如此;我的笔记本电脑 OpenVPN 自动设置为尝试连接到我的 VPN mydomainname.com
,该 VPN 动态分配给我的家庭路由器,然后将其转发到运行 VPN 的计算机的端口 1194。192.168.16.1
这可能不是所有路由器的情况,但至少对于我的路由器来说,mydomainname.com
从本地子网连接到会创建与 OpenVPN 服务器的连接,该服务器看起来好像具有路由器的 IP 地址,而不是笔记本电脑的 IP 地址。(这是一个很长的故事,但我实际上想允许连接到路由器的其他设备在不同子网上进行 VPN 访问——我的家庭设置相当复杂 :D)。
mydomainname.com
在我的案例中,最终的解决方案是将路由器的 DNS 服务器配置为从到 的静态分配192.168.16.1
,这样可以mydomainname.com
直接解析为,192.168.16.1
否则将解析为路由器的外部 IP。这对我来说有效,但您的情况可能会有所不同。