首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我的systemd单元文件和bash脚本不适用于接口ppp0检查。

我的systemd单元文件和bash脚本不适用于接口ppp0检查。
EN

Stack Overflow用户
提问于 2020-11-19 22:15:21
回答 2查看 374关注 0票数 0

使用两个bash脚本,我必须使用IPsec/L2tpd隧道来理解系统并创建一个工作的服务。如果我使用命令行中的bash脚本命令,所有这些都可以正常工作,但由于某种原因,我得到了争用条件或缺少同步或其他原因,因为使用我的systemd单元文件是随机的和间歇性的,经常需要随机数量的重新启动才能工作。

vpn-disconnect.sh

代码语言:javascript
运行
复制
echo "d myvpn" > /var/run/xl2tpd/l2tp-control
ipsec down myvpn
while grep ppp0 /proc/net/dev < /dev/null; do
        echo "Waiting for ppp0 to go down ..."
        sleep 5
done
echo "$0: ppp0/myvpn now down"

vpn-connect.sh

代码语言:javascript
运行
复制
VPN_SERVER_IP='161.35.36.182'
VPN_IPSEC_PSK='Vsumz0402#tillykeats'
VPN_USER='pi'
VPN_PASSWORD='Psumz0402'

if [[ $EUID -ne 0 ]] ; then
  echo "$0: Must be run as ROOT"
  exit 1
fi

/home/daz/VPN/vpn-disconnect.sh

echo "
### Creating ipsec connections file ..."
cat > /etc/ipsec.conf <<EOF
config setup

conn %default
  ikelifetime=60m
  keylife=20m
  rekeymargin=3m
  keyingtries=1
  keyexchange=ikev1
  authby=secret
  ike=aes128-sha1-modp2048!
  esp=aes128-sha1-modp2048!

conn myvpn
  keyexchange=ikev1
  left=%defaultroute
  auto=add
  authby=secret
  type=transport
  leftprotoport=17/1701
  rightprotoport=17/1701
  right=$VPN_SERVER_IP
EOF

echo "
### Creating PSK file ..."
cat > /etc/ipsec.secrets <<EOF
: PSK "$VPN_IPSEC_PSK"
EOF
chmod 600 /etc/ipsec.secrets

echo "
### Creating xl2tpd config file ..."
cat > /etc/xl2tpd/xl2tpd.conf <<EOF
[lac myvpn]
lns = $VPN_SERVER_IP
ppp debug = yes
pppoptfile = /etc/ppp/options.l2tpd.client
length bit = yes
EOF

echo "
### Creating PPP client file ..."
cat > /etc/ppp/options.l2tpd.client <<EOF
ipcp-accept-local
ipcp-accept-remote
refuse-eap
require-chap
noccp
noauth
mtu 1280
mru 1280
noipdefault
defaultroute
usepeerdns
connect-delay 5000
name $VPN_USER
password $VPN_PASSWORD
EOF
chmod 600 /etc/ppp/options.l2tpd.client

echo "
### Creating control file ..."
mkdir -p /var/run/xl2tpd
touch /var/run/xl2tpd/l2tp-control

echo "
### Restarting services ..."
service strongswan restart
service xl2tpd restart

echo "
### Bringing up connection ..."
ipsec up myvpn
echo "c myvpn" > /var/run/xl2tpd/l2tp-control
while ! grep ppp0 /proc/net/dev ; do
        echo "waiting for ppp0 ..."
        sleep 5
done

echo "
### DONE !!"
ifconfig

/etc/systemd/system/vpn.service

代码语言:javascript
运行
复制
[Service]
Type=oneshot
#Type=forking
#Type=notify
#Type=simple
#User=root
#Restart=no
#RuntimeMaxSec=10
#RestartSec=1
#User=root
WorkingDirectory=/tmp
RemainAfterExit=yes
ExecStart=/bin/sh -c '/home/vpn-connect.sh'
#ExecStartPre=/bin/sleep 10
#ExecStop=/bin/sh -c '/home/vpn-disconnect.sh'
#KillMode=process
StandardOutput=journal
StandardError=inherit
#SuccessExitStatus=0 143
#RestartSec=5
#Restart=on-failure
#TimeoutStopSec=120
#LimitNOFILE=102642

[Unit]
Description=IPsec L2TP tunner
After=network-online.target
StartLimitIntervalSec=0

[Install]
WantedBy=multi-user.target

其目的是通过服务来打开ppp0接口(或将其删除)。我有过一些症状,正如您所看到的,我尝试过各种配置(注释它们)。我迷路了。我在这个配置中得到的各种条件:-

vpn-连接在vpn之前启动的finishes.

  • zombie竞争条件--断开bash脚本的ppp0)

  • vpn-connect进程,这会阻止新启动的脚本完成(相互冲突,试图向下/向上运行,ppp0)

  • vpn-connect永远不会结束,因为ppp0没有失败,因为ppp0没有崩溃。更困惑的是!

就像我说的,如果我以的形式从命令行运行它们,那就太完美了。./vpn-connect.sh。./vpn--在需要时断开,如vpn-在登录后连接,在关闭电源之前连接。

(请帮助:)

我承认我可能不是这样做的‘正确的’方式,但我不是专家,已经尝试并取得了一些方式,在来这里之前。可能有一种更好的方法来检查ppp0接口是否关闭/向上,并且肯定有更好的方法来制作服务文件?

预先谢谢你,大师。

EN

Stack Overflow用户

发布于 2020-11-20 16:06:25

将VPN作为一种服务启动似乎不是一个好主意。这是可能的,但服务应该在系统启动时启动,因此您必须处理对网络的依赖等问题。

由于您的脚本在独立模式下工作正常,我建议将它们用作主网络接口的上下挂钩(参见Run script when eth0 UP)。

P.S.在这一行

代码语言:javascript
运行
复制
while grep ppp0 /proc/net/dev < /dev/null; do

你可能想说

代码语言:javascript
运行
复制
while grep ppp0 /proc/net/dev > /dev/null; do

代码语言:javascript
运行
复制
while grep -q ppp0 /proc/net/dev; do
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64920825

复制
相关文章

相似问题

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