Netgear R7000路由器运行Tomato v1.28.0000 -2017.2-kille72- K26ARM USB AIO-64K
目标:使用curl从JSON接收端口号
当我在 shell 中运行此脚本时,它可以工作,但当我在 OpenVPN 配置中调用该脚本时,它不起作用。
#!/opt/bin/bash
#
# Enable port forwarding when using Private Internet Access
#
# Usage:
# ./port_forwarding.sh
set -x
exec 5>/etc/openvpn/mylog
BASH_XTRACEFD="5"
sleep 10
client_id_file="/etc/openvpn/pia_client_id"
client_id=$(/bin/cat "$client_id_file")
json=$(/opt/bin/curl "http://209.222.18.222:2000/?client_id=$client_id" 2>/dev/null)
/bin/echo server returned message: "$json"
外壳输出:
+ sleep 10
+ client_id_file=/etc/openvpn/pia_client_id
++ /bin/cat /etc/openvpn/pia_client_id
+ client_id=080db0a6e936918d405683447a78bf426273e9a1ea2ecce744722ac3241d4232
++ /opt/bin/curl 'http://209.222.18.222:2000/?client_id=080db0a6e936918d405683447a78bf426273e9a1ea2ecce744722ac3241d4232'
+ json='{"port":44257}'
+ /bin/echo server returned message: '{"port":44257}'
OpenVPN 的输出:
+ sleep 10
+ client_id_file=/etc/openvpn/pia_client_id
++ /bin/cat /etc/openvpn/pia_client_id
+ client_id=080db0a6e936918d405683447a78bf426273e9a1ea2ecce744722ac3241d4232
++ /opt/bin/curl 'http://209.222.18.222:2000/?client_id=080db0a6e936918d405683447a78bf426273e9a1ea2ecce744722ac3241d4232'
+ json=
+ /bin/echo server returned message: ''
上一个问题的更多详细信息:打开 VPN 调用脚本:无法识别的选项:[AF_INET]
答案1
空的原因json
是因为curl
失败。
失败的原因curl
是因为;作为一项安全措施(因此按设计),OpenVPN 将不允许任何数据包通过隧道任何由二进制文件启动的脚本openvpn
仍在执行。
您将需要找到另一种方法来调用脚本。