我正在深入了解 OpenVPN 的魅力,但在手动配置路由表时遇到了一些麻烦。我使用的是 Arch Linux。
我知道 OpenVPN 会在连接时自动更新路由表,但我想编写一个脚本来自己更新它们。我了解了 OpenVPN 的“--route-noexec”参数,它可以阻止自动更新,以及“--route-up”参数,它可以通过环境变量将相关信息传递给我选择的脚本。
这是我遇到麻烦的地方。我期望环境变量能够传递给脚本,这确实发生了,但我似乎漏掉了一些。特别是列出我的远程 IP 地址的那个(我相信是 untrusted/trusted_ip),这使得设置 iproute 变得很困难。
我的脚本接收的环境变量如下:
dev_type=tun
proto_1=udp
tun_mtu=1500
script_type=route-up
verb=1
local_port_1=1194
dev=tun0
remote_port_1=1194
PWD=/tmp
daemon=0
SHLVL=1
script_context=init
daemon_start_time=1409367799
daemon_pid=927
daemon_log_redirect=0
link_mtu=1500
_=/usr/bin/printenv
我用来启动VPN的命令如下:
sudo openvpn --dev tun --route-noexec --script-security 2 --route-up /tmp/print.sh
最后我传递给它的脚本如下:
#!/bin/bash
printenv
有人知道我为什么遗漏了变量吗?如能得到任何帮助我将不胜感激!
答案1
您是否还应该传递“--config”选项?例如。
openvpn --config /etc/openvpn/vpn.conf --script-security 2 --ifconfig-noexec --route-noexec --up ./netnsvpn-up --route-up ./netnsvpn-up
和 netnsvpn-up 类似:
case $script_type in
up)
ip netns add vpntun0
ip netns exec vpntun0 ip link set dev lo up
ip link set dev "$1" up netns vpntun0 mtu "$2"
env
ip netns exec vpntun0 ip addr add dev "$1" "${ifconfig_local}"/"${ifconfig_netmask:-30}"
;;
route-up)
ip netns exec vpntun0 ip route add default via "$route_vpn_gateway"
;;
down)
ip netns delete vpntun0
;;
esac
vpntun0 是名称空间。