我有一个通过域名而不是 IP 连接的 VPN(OpenVPN)。VPN 的 IP 是动态的,随时可能更改。我希望我的机器与互联网的唯一通信my.vpn.domain.com
是没有什么别的。
我将使用 OpenDNS 查找作为查找my.vpn.domain.com
,并且我相信它足够安全(假设它还阻止所有不属于 vpn 域的 IP/连接),并且我看不到更好/其他基于 IP 层的选项。
我的目的是拥有一个真正好的 VPN 终止开关(没有泄漏或人工干预)。
一旦我通过其域连接到 VPN,我应该能够my.vpn.domain.com
解除限制,并让我的防火墙/iptables 仅允许通过 tun0 进行连接。然后,如果 VPN 连接断开,则my.vpn.domain.com
仅通过以下方式重新启动,然后是 vpn 连接,然后允许所有 tun0 等。
可以通过 hosts 文件或其他方式完成此操作吗?我是 Linux 脚本新手。
答案1
为什么不尝试这样的事情:
设置 iptables 以删除非隧道接口上的所有 dns 查询,但允许 my.vpn.domain
iptables -A INPUT -o eth0 -p udp -s $your_dns_server --sport 53 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -o eth0 -p udp --dport 53 -j DENY
iptables -A OUTPUT -o eth0 -p udp --dport 53 -m string --string my.vpn.domain --algo bm -j ACCEPT
iptables -A OUTPUT -o eth0 -p udp -d $your_dns_server --dport 53 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p udp --dport 53 -j DROP
配置 openvpn,一旦建立隧道,所有流量都会发送到隧道下
OpenVpn 默认不会将所有流量路由到隧道,但可以通过配置来实现redirect-gateway
。阅读“通过 VPN 路由所有客户端流量(包括网络流量)”部分这里。
配置openvpn自动重新连接
尝试使用 ping-restart 和 keepalive 配置值。
ping 10
ping-restart 120
push "ping 10"
push "ping-restart 60"
or equivalently:
keepalive 10 60
根据需要进行调整,但在完美的世界中,如果您拨入您的 iptables 设置和 openvpn keepalive 设置,您的机器应该只能查询 my.vpn.domain,建立和重新建立 openvpn 连接,并且仅在可用时路由该连接。
如果你还没有阅读 openvpn 文档在动态 IP 地址上运行 OpenVPN 服务器以确保您的服务器端配置正确。
...如果客户端计算机是远程的,请确保您允许通过 iptables 进行 SSH,这样您就不会把自己锁在外面。如果您是 iptables 新手,请谨慎行事。