我正试图在运行最小安装的OpenVPN 6.10的无头服务器上使用CentOS设置传输,理想情况下,这些传输将在我启动系统时启动。
我能够通过遵循这里和这里的步骤来运行所有的东西,但这只能在手动运行脚本(如两个教程所示的vpn.sh)时起作用。该脚本如下所示:
#!/bin/sh
sudo openvpn --cd /etc/openvpn --config /etc/openvpn/conf.ovpn --script-security 2 --up /etc/openvpn/up.sh除了OpenVPN和传输之外,我还可以添加一个这个电报机器人,它应该在其他所有操作结束后启动,所以我的up.sh文件在末尾还有一个行,如下所示:
#!/bin/sh
/etc/init.d/transmission-daemon stop
/bin/sed s/IP_ADDRESS/$4/ /var/lib/transmission/.config/transmission/settings_template.json > /var/lib/transmission/.config/transmission/settings.json
/etc/init.d/transmission-daemon start
/etc/init.d/transmission-telegram start理想情况下,我可以做一些更像这个职位概述的事情,但对于是否所有流量都通过虚拟专用网,或者只有洪流流量可以做到这一点,我并不特别挑剔:
我试着遵循那篇文章中概述的步骤,由于某些原因,我无法让事件transmission-vpn-up发生--这是由教程中的route-up.sh脚本触发的--并且总是得到initctl: Event failed。我无法通过遵循post中的步骤或手动将脚本的内容传递到命令行来发出该事件。根据Ask Ubuntu上的帖子,route-up.sh如下所示:
#! /bin/bash
/sbin/initctl emit transmission-vpn-up VPN_GATEWAY=$route_vpn_gateway LOCAL_IP=$ifconfig_local但是,如果将down.sh的内容传递给命令行,则不会出现这样的错误:
/sbin/initctl emit transmission-vpn-down尝试用sudo传递和不使用它。
有什么简单的方法让我把这整件事都安排好吗?考虑到emit是Ubuntu的教程,而不是CentOS,我是不是特别缺少了在AU上的另一个教程中指定的transmission-vpn-up呢?
或者,让vpn.sh (本文中的第一个代码块)在引导时运行会更容易吗?如果VPN崩溃,它将是一样整洁或优雅,但它会做到这一点。
Quick更新:
我前面提到的关于询问Ubuntu的教程,特别是在/etc/init/transmission-up.conf中,正在尝试使用/usr/sbin/ufw,这在CentOS中是我没有的--因此产生了最初的Event failed错误消息。我暂时注释掉了这些部分,现在我没有任何错误消息。
然而,即使没有任何错误消息和VPN的启动和运行,似乎其他东西正在失败,因为传输从来没有启动.我能去哪看看有什么线索吗?
发布于 2019-04-28 21:56:27
下面是有关这个问题的一些详细方面和解决方案(请注意,centos 6没有使用systemd,而是在v7上切换到systemd )。
centos 7的
/etc/systemd/system/openvpn-custom.service的文本编辑器打开nano openvpn-custom.service
3-编辑和设置服务文件:(使用root)
将以下代码粘贴并调整到/etc/systemd/system/openvpn-custom.service中
[Unit] Description=OpenVPN Custom Setup Script After=network.target network-online.target Wants=network-online.target [Service] Type=forking RemainAfterExit=yes ExecStart=/full-path-to/your/vpn-script/vpn.sh ExecStop=/full-path-to/a-scirpt/that-would-stop-openvpn/vpn-stop.sh [Install] WantedBy=multi-user.target
4-启用并启动服务:(使用root)
systemctl enable openvpn-custom.service systemctl start openvpn-custom.service
您可以使用systemctl status openvpn-custom.service检查服务的状态。
启动时的Setup传输和电报(基于openvpn状态):
与openvpn解决方案一样,创建一个包含以下代码的新服务(然后启用并启动它)
[Unit] Description=Application Depending on OpenVPN After=network.target network-online.target openvpn-custom.service Wants=network-online.target openvpn-custom.service [Service] Type=forking RemainAfterExit=yes ExecStart=/full-path-to/your/ovpn-applications.sh ExecStop=/full-path-to/a-scirpt/that-would-stop-apps/ovpn-applications-stop.sh [Install] WantedBy=multi-user.target
您的ovpn应用程序. something看起来像这样
#!/bin/sh /bin/sed s/IP_ADDRESS/$4/ /var/lib/transmission/.config/transmission/settings_template.json > /var/lib/transmission/.config/transmission/settings.json /etc/init.d/transmission-daemon start /etc/init.d/transmission-telegram start
After=openvpn-custom.service和Wants=openvpn-custom.service将根据openvpn创建该服务,因此,如果openvpn服务未启动或失败,则其他服务将不会启动。
centos 6的
/etc/rc.d/init.d/openvpn-custom的文本编辑器打开nano openvpn-custom
3-编辑和设置服务文件:(使用root)
#!/bin/bash # # chkconfig: 2345 55 45 # description: Custom openvpn script # processname: openvpn # ### BEGIN INIT INFO # Provides: openvpn # Required-Start: $network # Required-Stop: $network # Default-Start: 2 3 4 5 # Short-Description: The openvpn daemon # Description: The openvpn daemon custom script ### END INIT INFO #/etc/rc.d/init.d/openvpn-custom # Source function library. . /etc/init.d/functions start() { echo -n "Starting custom openvpn... " /full-path-to/your/vpn-script/vpn.sh return 0 } stop() { echo -n "Shutting down custom openvpn... " /full-path-to/a-scirpt/that-would-stop-openvpn/vpn-stop.sh return 0 } case "$1" in start) start ;; stop) stop ;; status) ;; restart) stop start ;; reload) ;; *) echo "Usage: openvpn-custom {start|stop|status|reload|restart}" exit 1 ;; esac exit $?
4-启用并启动服务:(使用root)
chkconfig openvpn-custom on service openvpn-custom start
您可以使用service openvpn-custom status检查服务的状态。
How以确保openvpn只在网络准备就绪时才启动
initscript开头的chkconfig定义决定了它得到的S/K号。
每个"runlevel“实际上只是一个目录(/etc/rc*.d/),其中充满了指向initscript的符号链接(/etc/init.d/),并且这些符号链接的命名都有编号为S和K的条目。
S代表开始,K代表杀戮。当init进入运行级时,它从S01开始,一直工作到S99,运行每个initscript来启动脚本控制的服务。当init离开运行级时,它从K01开始,一直工作到K99,运行每个脚本来停止该脚本控制的服务。
man chkconfig提供了一个chkconfig样式服务定义和(LSB)样式服务定义的示例。
如果initscript定义了这两种类型,LSB定义应该优先于chkconfig定义。
如果您有一个依赖于网络连接的服务,您可以在/etc/rc*.d/s10网络之后确定服务启动,方法是在10之后给它一个启动号,或者您可以看到/etc/init.d/network具有LSB定义Provides:$ network ,因此可以在initscript中使用LSB定义Required- start:$network。
启动时的Setup传输和电报(基于openvpn状态):
与openvpn解决方案一样,创建一个新服务(然后启用并启动它),其中包含以下代码(/etc/rc.d/init.d/openvpn-app)
#!/bin/bash # # chkconfig: 2345 55 45 # description: Custom openvpn-apps script # processname: openvpn-apps # ### BEGIN INIT INFO # Provides: openvpn-apps # Required-Start: $network # Required-Stop: $network # Default-Start: 2 3 4 5 # Short-Description: The openvpn-apps daemon # Description: The openvpn daemon custom script ### END INIT INFO #/etc/rc.d/init.d/openvpn-apps # Source function library. . /etc/init.d/functions start() { echo -n "Starting custom openvpn... " /full-path-to/your/apps.sh return 0 } stop() { echo -n "Shutting down custom openvpn... " /full-path-to/your/stop-apps.sh return 0 } case "$1" in start) start ;; stop) stop ;; status) ;; restart) stop start ;; reload) ;; *) echo "Usage: openvpn-apps {start|stop|status|reload|restart}" exit 1 ;; esac exit $?
你的apps.sh看起来就像这样
#!/bin/sh /bin/sed s/IP_ADDRESS/$4/ /var/lib/transmission/.config/transmission/settings_template.json > /var/lib/transmission/.config/transmission/settings.json /etc/init.d/transmission-daemon start /etc/init.d/transmission-telegram start
要使您的apps.sh依赖openvpn状态,您可以首先用sleep 或延迟apps.sh的启动,编写一个bash循环,用ps 或检查openvpn,检查openvn网关的ping结果(在apps.sh中)或,您可以只检查service openvpn-custom status的结果(在apps.sh中)。
Fail安全openvpn:
如果openvpn不工作,您可以设置一个“故障安全”来使网络瘫痪,从而防止连接在vpn不起作用时泄漏,您可以使用这或那解决方案。
Force使用特定接口的应用程序:
如果您的openvpn安装程序是整个系统的隧道/路由;没有必要这样做,但是如果您没有通过openvpn接口路由所有通信量,则可以代理/绑定/强制应用程序(传输/电报)使用vpn;在Linux下,有几种解决方案将应用程序绑定到特定的接口,每个解决方案都有其利弊- 答案详细解释了大多数可用的可能性。
发布于 2019-05-04 17:10:03
https://unix.stackexchange.com/questions/515220
复制相似问题