首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在OpenVPN 6启动时设置CentOS和传输?

如何在OpenVPN 6启动时设置CentOS和传输?
EN

Unix & Linux用户
提问于 2019-04-24 11:16:36
回答 2查看 2.4K关注 0票数 5

我正试图在运行最小安装的OpenVPN 6.10的无头服务器上使用CentOS设置传输,理想情况下,这些传输将在我启动系统时启动。

我能够通过遵循这里这里的步骤来运行所有的东西,但这只能在手动运行脚本(如两个教程所示的vpn.sh)时起作用。该脚本如下所示:

代码语言:javascript
复制
#!/bin/sh

sudo openvpn --cd /etc/openvpn --config /etc/openvpn/conf.ovpn --script-security 2 --up /etc/openvpn/up.sh

除了OpenVPN和传输之外,我还可以添加一个这个电报机器人,它应该在其他所有操作结束后启动,所以我的up.sh文件在末尾还有一个行,如下所示:

代码语言:javascript
复制
#!/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

理想情况下,我可以做一些更像这个职位概述的事情,但对于是否所有流量都通过虚拟专用网,或者只有洪流流量可以做到这一点,我并不特别挑剔:

  1. 在启动时启动OpenVPN (在网络建立之后);
  2. 如果VPN连接通过,配置传输以运行它;
  3. 如果这通过,运行传输(和电报机器人);
  4. 如果在任何时候VPN崩溃,也会给传输(和电报机器人)带来优雅的下降。

我试着遵循那篇文章中概述的步骤,由于某些原因,我无法让事件transmission-vpn-up发生--这是由教程中的route-up.sh脚本触发的--并且总是得到initctl: Event failed。我无法通过遵循post中的步骤或手动将脚本的内容传递到命令行来发出该事件。根据Ask Ubuntu上的帖子,route-up.sh如下所示:

代码语言:javascript
复制
#! /bin/bash

/sbin/initctl emit transmission-vpn-up VPN_GATEWAY=$route_vpn_gateway LOCAL_IP=$ifconfig_local

但是,如果将down.sh的内容传递给命令行,则不会出现这样的错误:

代码语言:javascript
复制
/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的启动和运行,似乎其他东西正在失败,因为传输从来没有启动.我能去哪看看有什么线索吗?

EN

回答 2

Unix & Linux用户

发布于 2019-04-28 21:56:27

解决方案

下面是有关这个问题的一些详细方面和解决方案(请注意,centos 6没有使用systemd,而是在v7上切换到systemd )。

centos 7的

解决方案启动时的Setup OpenVPN: 我们可以使用systemd (实现服务)使openvpn在引导时启动,我们需要创建服务,启用它,然后启动它。(启用服务后,will将在引导时自动启动) 1-创建服务:(使用root) cd /etc/systemd/system touch openvpn-custom.service chmod 644 openvpn-custom.service 2-打开服务文件:(使用root) 使用使用示例/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.serviceWants=openvpn-custom.service将根据openvpn创建该服务,因此,如果openvpn服务未启动或失败,则其他服务将不会启动。 centos 6

解决方案启动时的Setup OpenVPN: 1-创建服务:(使用root) cd /etc/rc.d/init.d touch openvpn-custom chmod 755 openvpn-custom 2-打开服务文件:(使用root) 使用使用示例/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)样式服务定义的示例。

  • http://linux.die.net/man/8/chkconfig
  • http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/initscrcomconv.html

如果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中)。

解决方案(6 & 7)注:

Fail安全openvpn:

如果openvpn不工作,您可以设置一个“故障安全”来使网络瘫痪,从而防止连接在vpn不起作用时泄漏,您可以使用解决方案。

Force使用特定接口的应用程序:

如果您的openvpn安装程序是整个系统的隧道/路由;没有必要这样做,但是如果您没有通过openvpn接口路由所有通信量,则可以代理/绑定/强制应用程序(传输/电报)使用vpn;在Linux下,有几种解决方案将应用程序绑定到特定的接口,每个解决方案都有其利弊- 答案详细解释了大多数可用的可能性。

票数 3
EN

Unix & Linux用户

发布于 2019-05-04 17:10:03

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/515220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档