AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-38644

Gerald Schneider's questions

Martin Hope
Gerald Schneider
Asked: 2024-01-25 14:53:24 +0800 CST

通过 OpenLDAP 元后端结合 OpenLDAP 和 Active Directory

  • 6

我们有一个用于通过 Atlassian Crowd 实例进行身份验证的应用程序,但经过重大重写后,该身份验证源不再可用。现在我需要一个解决方案来对来自 Active Directory 和 OpenLDAP 服务器的用户进行身份验证,该解决方案之前由 Crowd 处理。

最有前途的选项似乎是 OpenLDAP 元后端,我现在有一个配置,可以使用 查找两个目录中的用户ldapsearch,但身份验证仅适用于 AD 用户。我发现了几个这样的问题,这非常有帮助,但 ultimatley 对我不起作用。

           Application
               │
               ▼
         OpenLDAP (meta)
             │   │
             │   │
 OpenLDAP ◄──┘   └─►  Active Directory

这是我当前的配置:

moduleload back_meta.la
moduleload back_ldap.la
moduleload rwm

include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/msuser.schema

database meta

suffix "dc=openldap,dc=Example,dc=com"
uri "ldap://openldap.example.com/dc=openldap,dc=Example,dc=com"
map objectclass user inetOrgPerson
map attribute sAMAccountName uid
#map attribute unicodePwd userPassword
map attribute objectGUID entryUUID
map objectclass group groupOfUniqueNames
map attribute member uniqueMember
protocol-version 3
#rebind-as-user yes
idassert-authzFrom "dn.regex:.*"

suffix "DC=ad,DC=Example,DC=com"
uri "ldap://dc01.ad.example.com/DC=ad,DC=Example,DC=com"
rebind-as-user yes
chase-referrals no
readonly yes
protocol-version 3
idassert-bind
  bindmethod=simple
  binddn="CN=username,OU=Service-Accounts,DC=ad,DC=Example,DC=com"
  credentials="PASSWORD"
  flags=override
  mode=none
norefs yes
sizelimit 999
idassert-authzFrom "dn.regex:.*"

suffix "dc=Example,dc=com"
rootdn "cn=admin,dc=Example,dc=com"
rootpw PASSWORD

看来剩下的唯一问题就是密码字段了。根据 MS 文档, 和 都unicodePwd存在userPassword于 AD 中,但两者都不适用于 OpenLDAP 服务器(使用userPassword)。我无法了解 AD 中的密码是如何散列的,存储在 OpenLDAP 中的帐户是使用 MD5 或 SSHA 进行散列的,具体取决于我猜测的密码的年龄。

我尝试rebind-as-user打开和关闭 OpenLDAP 服务器,我尝试使用用户名而不是匿名进行绑定,我没有任何想法了。

能够针对两个目录进行身份验证缺少什么?

active-directory
  • 1 个回答
  • 51 Views
Martin Hope
Gerald Schneider
Asked: 2023-09-19 21:30:39 +0800 CST

我可以在 Slurm 节点上释放过时的已分配 GRES 吗?

  • 6

有什么方法可以清除 Slurm 中陈旧分配的 GRES 吗?

我有一个节点,其中分配了 4 个 GPU,但该节点上没有运行任何作业。重新启动节点不会释放 GPU。

user@control1:~$ scontrol show node node2
NodeName=node2 Arch=x86_64 CoresPerSocket=64
   CPUAlloc=0 CPUTot=256 CPULoad=0.05
   AvailableFeatures=(null)
   ActiveFeatures=(null)
   Gres=gpu:tesla:8
   NodeAddr=node2 NodeHostName=node2 Version=21.08.5
   OS=Linux 5.15.0-83-generic #92-Ubuntu SMP Mon Aug 14 09:30:42 UTC 2023
   RealMemory=1025596 AllocMem=0 FreeMem=1025887 Sockets=2 Boards=1
   State=IDLE ThreadsPerCore=2 TmpDisk=0 Weight=1 Owner=N/A MCS_label=N/A
   Partitions=DEFAULT
   BootTime=2023-09-19T12:58:23 SlurmdStartTime=2023-09-19T12:59:06
   LastBusyTime=2023-09-19T12:59:07
   CfgTRES=cpu=256,mem=1025596M,billing=256,gres/gpu=8,gres/gpu:tesla=8
   AllocTRES=gres/gpu=4
   CapWatts=n/a
   CurrentWatts=0 AveWatts=0
   ExtSensorsJoules=n/s ExtSensorsWatts=0 ExtSensorsTemp=n/s

user@control1:~$ squeue -w node2 --state=all
   JOBID     NAME     USER    STATE         TIME        QOS PRIORITY   TIME_LIMIT NODELIST(REASON)
slurm
  • 1 个回答
  • 17 Views
Martin Hope
Gerald Schneider
Asked: 2020-09-24 02:04:41 +0800 CST

如何转发来自我的网络服务器的请求?

  • 9

这是一个关于反向代理、它们如何工作以及如何配置的规范问题。

如何为来自不同端口上的服务或来自具有相同网络服务器的不同服务器的请求提供服务,并通过 URL 区分它?

nginx reverse-proxy apache2
  • 1 个回答
  • 2853 Views
Martin Hope
Gerald Schneider
Asked: 2019-05-10 11:49:46 +0800 CST

grep 排除多行模式

  • 0

使用grep在 文件 中搜索多行模式是很简单的。反转这种模式并没有那么多。

背景:我想创建没有密码的干净变量文件,以便我可以将它们提交到存储库中。

包含加密密码的变量文件示例:

ansible_user: rick
ansible_become_password: !vault |
        $ANSIBLE_VAULT;1.1;AES256
        35623732646263636163383738353230626565383533626261313564383832643334363632383134
        3833316539376436333462303564636236646662376535300a356631346166626632333365353465
        30343138313363666434343938393464343861666234633434383037393230633333333364383835
        3962383339373731610a316362326239386539633638646331636633333330633231383730323634
        33653332353239353662366631373037653135303163663365633532643535663933
never: 'gonna,give,you,up'

预期结果:

ansible_user: rick
never: 'gonna,give,you,up'

我可以使用以下命令轻松匹配包含密码的行:

grep -Pz '.+\: !vault \|(\n\s+.+){2,}' host_vars/host.yml

问题:-v通常会反转结果的参数不适用于-P

如何在没有密码行的情况下创建变量文件的副本?

ansible
  • 2 个回答
  • 578 Views
Martin Hope
Gerald Schneider
Asked: 2019-03-29 02:09:11 +0800 CST

Zabbix聚合检查不正确的函数表达式

  • 0

我正在尝试从所有 ESXi 主机的所有数据存储中获取延迟的聚合值。

grpmax我尝试了聚合函数的这些变体:

grpmax["Hypervisors","vmware.hv.datastore.read[{$URL},{HOST.HOST},,latency]",avg,600]
grpmax["Hypervisors","vmware.hv.datastore.read[,,,latency]",avg,600]

但对于两者我都收到错误消息:

函数表达式不正确:grpmax["Hypervisors","vmware.hv.datastore.read[,,,latency]",avg,600]

如何输入密钥以便 zabbix 在聚合中找到它们?

我要聚合的项目的键如下所示:

vmware.hv.datastore.read[{$URL},{HOST.HOST},datastore1,latency]
vmware.hv.datastore.read[{$URL},{HOST.HOST},datastore2,latency]
vmware.hv.datastore.read[{$URL},{HOST.HOST},datastore3,latency]
zabbix
  • 1 个回答
  • 633 Views
Martin Hope
Gerald Schneider
Asked: 2019-02-13 00:09:20 +0800 CST

keepalived 未检测到虚拟 IP 丢失

  • 9

我正在使用 keepalived 在两个虚拟机之间切换浮动 IP。

/etc/keepalived/keepalived.conf在虚拟机 1 上:

vrrp_instance VI_1 {
    state MASTER
    interface ens160
    virtual_router_id 101
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass secret
    }
    virtual_ipaddress {
        1.2.3.4
    }
}

/etc/keepalived/keepalived.conf在虚拟机 2 上:

vrrp_instance VI_1 {
    state MASTER
    interface ens160
    virtual_router_id 101
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass secret
    }
    virtual_ipaddress {
        1.2.3.4
    }
}

这基本上可以正常工作,但有一个例外:每次 systemd 更新(它运行的是 Ubuntu 18.04)时,它都会重新加载它的网络组件,导致浮动 IP 丢失,因为它没有在系统中配置。由于两个 keepalived 实例仍然可以相互 ping 通,因此它们都没有发现任何问题,也没有对此做出反应,导致浮动 IP 保持关闭。

我发现您可以使用如下简单脚本检查 IP:

vrrp_script chk_proxyip {
    script "/sbin/ip addr |/bin/grep 1.2.3.4"
}

vrrp_instance VI_1 {
    # [...]
    track_script {
        chk_proxyip
    }
}

但我不确定这是否是一种可行的方法。

如果我理解正确,如果我在 VM1 上配置此脚本,则会发生以下情况:

  1. 由于 systemd 重新启动,VM1 丢失了 IP
  2. VM1 上的 keepalived 检测到 IP 丢失
  3. keepalived 切换到FAULT状态并停止广播 vrrp 包
  4. VM2 上的 keepalived 检测到 VM1 上的 keepalived 丢失并将浮动 IP

此时 IP 再次在 VM2 上工作,但 VM1 将保持此状态,因为 IP 再也不会在 VM1 上出现。如果 VM2 出现故障(无论出于何种原因),VM1 不会接管它,因为它仍处于FAULT状态。

如何确保浮动 IP 始终在其中一个 VM 上运行?

进一步测试:

我尝试 ping 浮动 IP,而不是检查它是否在 check_script 中的特定主机上处于活动状态:

vrrp_script chk_proxyip {
    script "/bin/ping -c 1 -w 1 1.2.3.4"
    interval 2
}

在节点 2 上配置此脚本会导致以下结果:

  1. 删除节点 1 上的 IP 进行测试
  2. 节点 2 检测到 IP 丢失并从 更改BACKUP为FAULT
  3. 节点 1 忽略状态变化并停留MASTER

结果:IP 保持不变。

在节点 1 上配置脚本会导致以下结果:

  1. 删除节点 1 上的 IP
  2. 节点 1 检测到 IP 丢失并从 更改MASTER为FAULT
  3. 节点 2 检测到节点 1 上的状态变化并从 更改BACKUP为MASTER,在节点 2 上配置浮动 IP

嗯,然后……

Feb 13 10:11:26 node2 Keepalived_vrrp[3486]: VRRP_Instance(VI_1) Transition to MASTER STATE
Feb 13 10:11:27 node2 Keepalived_vrrp[3486]: VRRP_Instance(VI_1) Entering MASTER STATE
Feb 13 10:11:29 node2 Keepalived_vrrp[3486]: VRRP_Instance(VI_1) Received advert with higher priority 150, ours 100
Feb 13 10:11:29 node2 Keepalived_vrrp[3486]: VRRP_Instance(VI_1) Entering BACKUP STATE
Feb 13 10:11:32 node2 Keepalived_vrrp[3486]: VRRP_Instance(VI_1) Transition to MASTER STATE
Feb 13 10:11:33 node2 Keepalived_vrrp[3486]: VRRP_Instance(VI_1) Entering MASTER STATE
Feb 13 10:11:36 node2 Keepalived_vrrp[3486]: VRRP_Instance(VI_1) Received advert with higher priority 150, ours 100
Feb 13 10:11:36 node2 Keepalived_vrrp[3486]: VRRP_Instance(VI_1) Entering BACKUP STATE
Feb 13 10:11:38 node2 Keepalived_vrrp[3486]: VRRP_Instance(VI_1) Transition to MASTER STATE
Feb 13 10:11:39 node2 Keepalived_vrrp[3486]: VRRP_Instance(VI_1) Entering MASTER STATE
Feb 13 10:11:41 node2 Keepalived_vrrp[3486]: VRRP_Instance(VI_1) Received advert with higher priority 150, ours 100
Feb 13 10:11:41 node2 Keepalived_vrrp[3486]: VRRP_Instance(VI_1) Entering BACKUP STATE
Feb 13 10:11:44 node2 Keepalived_vrrp[3486]: VRRP_Instance(VI_1) Transition to MASTER STATE
Feb 13 10:11:45 node2 Keepalived_vrrp[3486]: VRRP_Instance(VI_1) Entering MASTER STATE
Feb 13 10:11:47 node2 Keepalived_vrrp[3486]: VRRP_Instance(VI_1) Received advert with higher priority 150, ours 100
...

我不得不在 node1 上重新启动 keepalived 以停止节点之间的乒乓球比赛。

keepalived
  • 5 个回答
  • 10385 Views
Martin Hope
Gerald Schneider
Asked: 2019-02-12 02:04:30 +0800 CST

预置自动分区

  • 5

多年来,我一直在使用以下partman设置来自动安装 VM:

d-i partman-auto/disk string /dev/sda
d-i partman-auto/method string regular
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-md/device_remove_md boolean true
d-i partman-lvm/confirm boolean true
d-i partman/alignment string "optimal"
d-i partman-auto/expert_recipe string                         \
      boot-root ::                                            \
              64 512 300% linux-swap                          \
                      $primary{ }                             \
                      method{ swap } format{ }                \
              .                                               \
              500 10000 1000000000 ext4                       \
                      $primary{ } $bootable{ }                \
                      method{ format } format{ }              \
                      use_filesystem{ } filesystem{ ext4 }    \
                      mountpoint{ / }                         \
              .
d-i partman/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true

这会在开始时创建一个小的交换分区,并将磁盘的其余部分用作根分区。当我需要增加虚拟磁盘的大小时,这很好用并且可以轻松扩展分区。

现在我正在尝试调整这个配方来安装许多相同的裸机服务器。为此,我只是切换了分区并将大小设置为具有 256GB RAM 和 460GB 系统磁盘(硬件 RAID1 中的 SSD,但这不重要)的机器更合理的值:

  boot-root ::                                            \
          32768 65536 1000000000 ext4                     \
                  $primary{ } $bootable{ }                \
                  method{ format } format{ }              \
                  use_filesystem{ } filesystem{ ext4 }    \
                  mountpoint{ / }                         \
          .                                               \
          16384 16384 65536 linux-swap                    \
                  $primary{ }                             \
                  method{ swap } format{ }                \
          .                                                 

其余partman*指令是相同的。

据我了解文档(以及类似的其他帖子),这应该创建一个几乎跨越整个磁盘的大根分区,最后有一个 16 到 64 GB 的交换分区。

好吧,它没有。它创建一个 450MB 的分区,然后是一个 460GB 的交换分区。

在此处输入图像描述

当我使用虚拟机的预种子安装同一台机器时,分区会按照预种子文件中的定义正确创建:

在此处输入图像描述

那么,我在裸机机的配方上做错了什么?

如果重要,安装 iso 是基于 Ubuntu 16.04.5 服务器 iso。

fdisk /dev/sda和的输出parted /dev/sda print:

在此处输入图像描述

我尝试了更多变体:

# this belongs to tha last block, as suggested by @Peter
#d-i partman-basicfilesystems/choose_label string gpt
#d-i partman-basicfilesystems/default_label string gpt
#d-i partman-partitioning/choose_label string gpt
#d-i partman-partitioning/default_label string gpt
#d-i partman/choose_label string gpt
#d-i partman/default_label string gpt

d-i partman-auto/expert_recipe string                         \
      boot-root ::                                            \
##########################
              65536 1 -1 ext4                             \
                      $primary{ } $bootable{ }                \
                      method{ format } format{ }              \
                      use_filesystem{ } filesystem{ ext4 }    \
                      mountpoint{ / }                         \
              .                                               \
              65536 65536 65536 linux-swap                    \
                      $primary{ }                             \
                      method{ swap } format{ }                \
              .                                               
##########################
#              1 1 -1 ext4                             \
#                      $primary{ } $bootable{ }                \
#                      method{ format } format{ }              \
#                      use_filesystem{ } filesystem{ ext4 }    \
#                      mountpoint{ / }                         \
#              .                                               \
#              65536 65536 65536 linux-swap                    \
#                      $primary{ }                             \
#                      method{ swap } format{ }                \
#              .                                               
##########################
#              32768 50 5242880 ext4                             \
#                      $primary{ } $bootable{ }                \
#                      method{ format } format{ }              \
#                      use_filesystem{ } filesystem{ ext4 }    \
#                      mountpoint{ / }                         \
#              .                                               \
#              16384 100 65536 linux-swap                    \
#                      $primary{ }                             \
#                      method{ swap } format{ }                \
#              .                                               
##########################
# use along with the annoted partman-* directives above
#              538 538 1075 free                           \
#                      $iflabel{ gpt }                     \
#                      $reusemethod{ }                     \
#                      method{ efi }                       \
#                            format{ }                     \
#              .                                           \
#              1 1 -1 ext4                                 \
#                  $primary{ } $bootable{ }                \
#                  method{ format } format{ }              \
#                  use_filesystem{ } filesystem{ ext4 }    \
#                  mountpoint{ / }                         \
#              .                                           \
#              65536 65536 65536 linux-swap                \
#                  $primary{ }                             \
#                  method{ swap } format { }               \              .                         
#              .

没有什么区别,生成的根分区总是只有 453MB。

ubuntu
  • 2 个回答
  • 6572 Views
Martin Hope
Gerald Schneider
Asked: 2018-12-14 03:27:13 +0800 CST

Kolla OpenStack 部署失败并显示“haproxy:等待虚拟 IP 出现”

  • 1

我正在尝试按照官方指南在 Ubuntu 主机上使用 kolla-ansible (7.0.0) 部署 OpenStack Queens 。

成功后bootstrap-servers命令precheck失败deploy:

RUNNING HANDLER [haproxy : Waiting for virtual IP to appear] **********************************************************  
fatal: [testcloudcontrol01]: FAILED! => {"changed": false, "elapsed": 300, "msg": "Timeout when waiting for 10.52.41.98:3306"}  
fatal: [testcloudcontrol02]: FAILED! => {"changed": false, "elapsed": 300, "msg": "Timeout when waiting for 10.52.41.98:3306"}

检查失败的原因是kolla_internal_vip_address没有出现。

全局变量.yml

config_strategy: "COPY_ALWAYS"
kolla_base_distro: "ubuntu"
kolla_install_type: "binary"
openstack_release: "queens"
kolla_internal_vip_address: "10.52.41.98"
kolla_internal_fqdn: "testcloudapi.example.com"
kolla_external_vip_address: "{{ kolla_internal_vip_address }}"
kolla_external_fqdn: "{{ kolla_internal_fqdn }}"
network_interface: "ens160"
api_interface: "ens160"
storage_interface: "ens161"
keepalived_virtual_router_id: "148"

我目前固定在皇后区,因为我想复制我们的生产环境进行测试。

ip addr在应该部署 haproxy 的节点之一上的输出:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:50:56:a1:6a:2c brd ff:ff:ff:ff:ff:ff
    inet 10.52.41.100/24 brd 10.52.41.255 scope global ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::250:56ff:fea1:6a2c/64 scope link
       valid_lft forever preferred_lft forever
3: ens161: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:50:56:a1:7d:07 brd ff:ff:ff:ff:ff:ff
    inet 10.52.42.100/24 brd 10.52.42.255 scope global ens161
       valid_lft forever preferred_lft forever
    inet6 fe80::250:56ff:fea1:7d07/64 scope link
       valid_lft forever preferred_lft forever
4: ens224: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:50:56:a1:23:6e brd ff:ff:ff:ff:ff:ff
    inet 10.52.40.100/24 brd 10.52.40.255 scope global ens224
       valid_lft forever preferred_lft forever
    inet6 fe80::250:56ff:fea1:236e/64 scope link
       valid_lft forever preferred_lft forever
5: ens256: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:50:56:a1:20:12 brd ff:ff:ff:ff:ff:ff
    inet 10.52.44.100/24 brd 10.52.44.255 scope global ens256
       valid_lft forever preferred_lft forever
    inet6 fe80::250:56ff:fea1:2012/64 scope link
       valid_lft forever preferred_lft forever
6: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:b0:8a:93:e7 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 scope global docker0
       valid_lft forever preferred_lft forever

这些节点是具有 VMXNet3 网卡的 VMware 虚拟机。

输出docker logs keepalived:

+ sudo -E kolla_set_configs
INFO:__main__:Loading config file at /var/lib/kolla/config_files/config.json
INFO:__main__:Validating config file
INFO:__main__:Kolla config strategy set to: COPY_ALWAYS
INFO:__main__:Copying service configuration files
INFO:__main__:Deleting /etc/keepalived/keepalived.conf
INFO:__main__:Copying /var/lib/kolla/config_files/keepalived.conf to /etc/keepalived/keepalived.conf
INFO:__main__:Setting permission for /etc/keepalived/keepalived.conf
INFO:__main__:Writing out command to execute
++ cat /run_command
+ CMD='/usr/sbin/keepalived -nld -p /run/keepalived.pid'
+ ARGS=
+ [[ ! -n '' ]]
+ . kolla_extend_start
++ modprobe ip_vs
++ '[' -f /run/keepalived.pid ']'
+ echo 'Running command: '\''/usr/sbin/keepalived -nld -p /run/keepalived.pid'\'''
Running command: '/usr/sbin/keepalived -nld -p /run/keepalived.pid'
+ exec /usr/sbin/keepalived -nld -p /run/keepalived.pid
Thu Dec 13 12:10:26 2018: Starting Keepalived v1.3.9 (10/21,2017)
Thu Dec 13 12:10:26 2018: Opening file '/etc/keepalived/keepalived.conf'.
Thu Dec 13 12:10:26 2018: Starting Healthcheck child process, pid=11
Thu Dec 13 12:10:26 2018: Opening file '/etc/keepalived/keepalived.conf'.
Thu Dec 13 12:10:26 2018: Starting VRRP child process, pid=12
Thu Dec 13 12:10:26 2018: ------< Global definitions >------
Thu Dec 13 12:10:26 2018:  Router ID = testcloudcontrol01.example.com
Thu Dec 13 12:10:26 2018:  Default interface = eth0
Thu Dec 13 12:10:26 2018:  LVS flush = false
Thu Dec 13 12:10:26 2018:  VRRP IPv4 mcast group = 224.0.0.18
Thu Dec 13 12:10:26 2018:  VRRP IPv6 mcast group = ff02::12
Thu Dec 13 12:10:26 2018:  Gratuitous ARP delay = 5
Thu Dec 13 12:10:26 2018:  Gratuitous ARP repeat = 5
Thu Dec 13 12:10:26 2018:  Gratuitous ARP refresh timer = 0
Thu Dec 13 12:10:26 2018:  Gratuitous ARP refresh repeat = 1
Thu Dec 13 12:10:26 2018:  Gratuitous ARP lower priority delay = 4294
Thu Dec 13 12:10:26 2018:  Gratuitous ARP lower priority repeat = -1
Thu Dec 13 12:10:26 2018:  Send advert after receive lower priority advert = true
Thu Dec 13 12:10:26 2018:  Send advert after receive higher priority advert = false
Thu Dec 13 12:10:26 2018:  Gratuitous ARP interval = 0
Thu Dec 13 12:10:26 2018:  Gratuitous NA interval = 0
Thu Dec 13 12:10:26 2018:  VRRP default protocol version = 2
Thu Dec 13 12:10:26 2018:  Iptables input chain = INPUT
Thu Dec 13 12:10:26 2018:  Using ipsets = true
Thu Dec 13 12:10:26 2018:  ipset IPv4 address set = keepalived
Thu Dec 13 12:10:26 2018:  ipset IPv6 address set = keepalived6
Thu Dec 13 12:10:26 2018:  ipset IPv6 address,iface set = keepalived_if6
Thu Dec 13 12:10:26 2018:  VRRP check unicast_src = false
Thu Dec 13 12:10:26 2018:  VRRP skip check advert addresses = false
Thu Dec 13 12:10:26 2018:  VRRP strict mode = false
Thu Dec 13 12:10:26 2018:  VRRP process priority = 0
Thu Dec 13 12:10:26 2018:  VRRP don't swap = false
Thu Dec 13 12:10:26 2018:  Checker process priority = 0
Thu Dec 13 12:10:26 2018:  Checker don't swap = false
Thu Dec 13 12:10:26 2018:  SNMP keepalived disabled
Thu Dec 13 12:10:26 2018:  SNMP checker disabled
Thu Dec 13 12:10:26 2018:  SNMP RFCv2 disabled
Thu Dec 13 12:10:26 2018:  SNMP RFCv3 disabled
Thu Dec 13 12:10:26 2018:  SNMP traps disabled
Thu Dec 13 12:10:26 2018:  SNMP socket = default (unix:/var/agentx/master)
Thu Dec 13 12:10:26 2018:  Network namespace = (default)
Thu Dec 13 12:10:26 2018:  DBus disabled
Thu Dec 13 12:10:26 2018:  DBus service name = (null)
Thu Dec 13 12:10:26 2018:  Script security disabled
Thu Dec 13 12:10:26 2018:  Default script uid:gid 0:0
Thu Dec 13 12:10:26 2018: Registering Kernel netlink reflector
Thu Dec 13 12:10:26 2018: Registering Kernel netlink command channel
Thu Dec 13 12:10:26 2018: Registering gratuitous ARP shared channel
Thu Dec 13 12:10:26 2018: Opening file '/etc/keepalived/keepalived.conf'.
Thu Dec 13 12:10:26 2018: WARNING - default user 'keepalived_script' for script execution does not exist - please create.
Thu Dec 13 12:10:26 2018: Truncating auth_pass to 8 characters
Thu Dec 13 12:10:26 2018: SECURITY VIOLATION - scripts are being executed but script_security not enabled.
Thu Dec 13 12:10:26 2018: ------< Global definitions >------
Thu Dec 13 12:10:26 2018:  Router ID = testcloudcontrol01.example.com
Thu Dec 13 12:10:26 2018:  Default interface = eth0
Thu Dec 13 12:10:26 2018:  LVS flush = false
Thu Dec 13 12:10:26 2018:  VRRP IPv4 mcast group = 224.0.0.18
Thu Dec 13 12:10:26 2018:  VRRP IPv6 mcast group = ff02::12
Thu Dec 13 12:10:26 2018:  Gratuitous ARP delay = 5
Thu Dec 13 12:10:26 2018:  Gratuitous ARP repeat = 5
Thu Dec 13 12:10:26 2018:  Gratuitous ARP refresh timer = 0
Thu Dec 13 12:10:26 2018:  Gratuitous ARP refresh repeat = 1
Thu Dec 13 12:10:26 2018:  Gratuitous ARP lower priority delay = 5
Thu Dec 13 12:10:26 2018:  Gratuitous ARP lower priority repeat = 5
Thu Dec 13 12:10:26 2018:  Send advert after receive lower priority advert = true
Thu Dec 13 12:10:26 2018:  Send advert after receive higher priority advert = false
Thu Dec 13 12:10:26 2018:  Gratuitous ARP interval = 0
Thu Dec 13 12:10:26 2018:  Gratuitous NA interval = 0
Thu Dec 13 12:10:26 2018:  VRRP default protocol version = 2
Thu Dec 13 12:10:26 2018:  Iptables input chain = INPUT
Thu Dec 13 12:10:26 2018:  Using ipsets = false
Thu Dec 13 12:10:26 2018:  ipset IPv4 address set = keepalived
Thu Dec 13 12:10:26 2018:  ipset IPv6 address set = keepalived6
Thu Dec 13 12:10:26 2018:  ipset IPv6 address,iface set = keepalived_if6
Thu Dec 13 12:10:26 2018:  VRRP check unicast_src = false
Thu Dec 13 12:10:26 2018:  VRRP skip check advert addresses = false
Thu Dec 13 12:10:26 2018:  VRRP strict mode = false
Thu Dec 13 12:10:26 2018:  VRRP process priority = 0
Thu Dec 13 12:10:26 2018:  VRRP don't swap = false
Thu Dec 13 12:10:26 2018:  Checker process priority = 0
Thu Dec 13 12:10:26 2018:  Checker don't swap = false
Thu Dec 13 12:10:26 2018:  SNMP keepalived disabled
Thu Dec 13 12:10:26 2018:  SNMP checker disabled
Thu Dec 13 12:10:26 2018:  SNMP RFCv2 disabled
Thu Dec 13 12:10:26 2018:  SNMP RFCv3 disabled
Thu Dec 13 12:10:26 2018:  SNMP traps disabled
Thu Dec 13 12:10:26 2018:  SNMP socket = default (unix:/var/agentx/master)
Thu Dec 13 12:10:26 2018:  Network namespace = (default)
Thu Dec 13 12:10:26 2018:  DBus disabled
Thu Dec 13 12:10:26 2018:  DBus service name = (null)
Thu Dec 13 12:10:26 2018:  Script security disabled
Thu Dec 13 12:10:26 2018:  Default script uid:gid 0:0
Thu Dec 13 12:10:26 2018: ------< VRRP Topology >------
Thu Dec 13 12:10:26 2018:  VRRP Instance = kolla_internal_vip_148
Thu Dec 13 12:10:26 2018:    Using VRRPv2
Thu Dec 13 12:10:26 2018:    Want State = BACKUP
Thu Dec 13 12:10:26 2018:    Running on device = ens160
Thu Dec 13 12:10:26 2018:    Skip checking advert IP addresses = no
Thu Dec 13 12:10:26 2018:    Enforcing strict VRRP compliance = no
Thu Dec 13 12:10:26 2018:    Using src_ip = 10.52.41.100
Thu Dec 13 12:10:26 2018:    Gratuitous ARP delay = 5
Thu Dec 13 12:10:26 2018:    Gratuitous ARP repeat = 5
Thu Dec 13 12:10:26 2018:    Gratuitous ARP refresh timer = 0
Thu Dec 13 12:10:26 2018:    Gratuitous ARP refresh repeat = 1
Thu Dec 13 12:10:26 2018:    Gratuitous ARP lower priority delay = 5
Thu Dec 13 12:10:26 2018:    Gratuitous ARP lower priority repeat = 5
Thu Dec 13 12:10:26 2018:    Send advert after receive lower priority advert = true
Thu Dec 13 12:10:26 2018:    Send advert after receive higher priority advert = false
Thu Dec 13 12:10:26 2018:    Virtual Router ID = 148
Thu Dec 13 12:10:26 2018:    Priority = 1
Thu Dec 13 12:10:26 2018:    Advert interval = 1 sec
Thu Dec 13 12:10:26 2018:    Accept enabled
Thu Dec 13 12:10:26 2018:    Preempt disabled
Thu Dec 13 12:10:26 2018:    Promote_secondaries disabled
Thu Dec 13 12:10:26 2018:    Authentication type = SIMPLE_PASSWORD
Thu Dec 13 12:10:26 2018:    Password = 0RXbQYFF
Thu Dec 13 12:10:26 2018:    Tracked scripts = 1
Thu Dec 13 12:10:26 2018:      check_alive weight 0
Thu Dec 13 12:10:26 2018:    Virtual IP = 1
Thu Dec 13 12:10:26 2018:      10.52.41.98/32 dev ens160 scope global
Thu Dec 13 12:10:26 2018: ------< VRRP Scripts >------
Thu Dec 13 12:10:26 2018:  VRRP Script = check_alive
Thu Dec 13 12:10:26 2018:    Command = /check_alive.sh
Thu Dec 13 12:10:26 2018:    Interval = 2 sec
Thu Dec 13 12:10:26 2018:    Timeout = 0 sec
Thu Dec 13 12:10:26 2018:    Weight = 0
Thu Dec 13 12:10:26 2018:    Rise = 10
Thu Dec 13 12:10:26 2018:    Fall = 2
Thu Dec 13 12:10:26 2018:    Insecure = no
Thu Dec 13 12:10:26 2018:    Status = INIT
Thu Dec 13 12:10:26 2018:    Script uid:gid = 0:0
Thu Dec 13 12:10:26 2018: ------< NIC >------
Thu Dec 13 12:10:26 2018:  Name = lo
Thu Dec 13 12:10:26 2018:  index = 1
Thu Dec 13 12:10:26 2018:  IPv4 address = 127.0.0.1
Thu Dec 13 12:10:26 2018:  IPv6 address = ::
Thu Dec 13 12:10:26 2018:  is UP
Thu Dec 13 12:10:26 2018:  is RUNNING
Thu Dec 13 12:10:26 2018:  MTU = 65536
Thu Dec 13 12:10:26 2018:  HW Type = LOOPBACK
Thu Dec 13 12:10:26 2018: ------< NIC >------
Thu Dec 13 12:10:26 2018:  Name = ens160
Thu Dec 13 12:10:26 2018:  index = 2
Thu Dec 13 12:10:26 2018:  IPv4 address = 10.52.41.100
Thu Dec 13 12:10:26 2018:  IPv6 address = fe80::250:56ff:fea1:6a2c
Thu Dec 13 12:10:26 2018:  MAC = 00:50:56:a1:6a:2c
Thu Dec 13 12:10:26 2018:  is UP
Thu Dec 13 12:10:26 2018:  is RUNNING
Thu Dec 13 12:10:26 2018:  MTU = 1500
Thu Dec 13 12:10:26 2018:  HW Type = ETHERNET
Thu Dec 13 12:10:26 2018: ------< NIC >------
Thu Dec 13 12:10:26 2018:  Name = ens161
Thu Dec 13 12:10:26 2018:  index = 3
Thu Dec 13 12:10:26 2018:  IPv4 address = 10.52.42.100
Thu Dec 13 12:10:26 2018:  IPv6 address = fe80::250:56ff:fea1:7d07
Thu Dec 13 12:10:26 2018:  MAC = 00:50:56:a1:7d:07
Thu Dec 13 12:10:26 2018:  is UP
Thu Dec 13 12:10:26 2018:  is RUNNING
Thu Dec 13 12:10:26 2018:  MTU = 1500
Thu Dec 13 12:10:26 2018:  HW Type = ETHERNET
Thu Dec 13 12:10:26 2018: ------< NIC >------
Thu Dec 13 12:10:26 2018:  Name = ens224
Thu Dec 13 12:10:26 2018:  index = 4
Thu Dec 13 12:10:26 2018:  IPv4 address = 10.52.40.100
Thu Dec 13 12:10:26 2018:  IPv6 address = fe80::250:56ff:fea1:236e
Thu Dec 13 12:10:26 2018:  MAC = 00:50:56:a1:23:6e
Thu Dec 13 12:10:26 2018:  is UP
Thu Dec 13 12:10:26 2018:  is RUNNING
Thu Dec 13 12:10:26 2018:  MTU = 1500
Thu Dec 13 12:10:26 2018:  HW Type = ETHERNET
Thu Dec 13 12:10:26 2018: ------< NIC >------
Thu Dec 13 12:10:26 2018:  Name = ens256
Thu Dec 13 12:10:26 2018:  index = 5
Thu Dec 13 12:10:26 2018:  IPv4 address = 10.52.44.100
Thu Dec 13 12:10:26 2018:  IPv6 address = fe80::250:56ff:fea1:2012
Thu Dec 13 12:10:26 2018:  MAC = 00:50:56:a1:20:12
Thu Dec 13 12:10:26 2018:  is UP
Thu Dec 13 12:10:26 2018:  is RUNNING
Thu Dec 13 12:10:26 2018:  MTU = 1500
Thu Dec 13 12:10:26 2018:  HW Type = ETHERNET
Thu Dec 13 12:10:26 2018: ------< NIC >------
Thu Dec 13 12:10:26 2018:  Name = docker0
Thu Dec 13 12:10:26 2018:  index = 6
Thu Dec 13 12:10:26 2018:  IPv4 address = 172.17.0.1
Thu Dec 13 12:10:26 2018:  IPv6 address = ::
Thu Dec 13 12:10:26 2018:  MAC = 02:42:b0:8a:93:e7
Thu Dec 13 12:10:26 2018:  is UP
Thu Dec 13 12:10:26 2018:  MTU = 1500
Thu Dec 13 12:10:26 2018:  HW Type = ETHERNET
Thu Dec 13 12:10:26 2018: Using LinkWatch kernel netlink reflector...
Thu Dec 13 12:10:26 2018: VRRP_Instance(kolla_internal_vip_148) Entering BACKUP STATE
Thu Dec 13 12:10:26 2018: /check_alive.sh exited with status 1
Thu Dec 13 12:10:28 2018: /check_alive.sh exited with status 1
Thu Dec 13 12:10:30 2018: VRRP_Instance(kolla_internal_vip_148) Now in FAULT state
Thu Dec 13 12:10:30 2018: /check_alive.sh exited with status 1
Thu Dec 13 12:10:32 2018: /check_alive.sh exited with status 1
[message repeats until I stop the container]

就是这样,两个keepalived 实例都处于FAULT 状态,IP 地址未在任何VM 上激活。

我经历了这个问题和答案,即使我在日志文件中没有错误消息:

  • keepalived_virtual_router_id 已更改并且是唯一的
  • 我又跑kolla-genpwd了。我确认keepalived_password设置在/etc/kolla/passwords.yml
  • kolla_internal_vip_address可从 访问network_interface。该接口上的主 IP 在同一网络中。我可以手动设置额外的 IP 地址,它可以工作。
  • kolla-ansible prechecks通行证
  • selinux 在 Ubuntu 上不活跃

在管理程序方面,我尝试启用Promiscuous mode该接口的端口组。这并没有什么不同。

haproxy
  • 1 个回答
  • 3207 Views
Martin Hope
Gerald Schneider
Asked: 2018-05-15 22:41:32 +0800 CST

在多个任务中注册 ansible 变量

  • 9

我在一个在各种服务器上安装更新的 ansible 脚本中使用以下任务。这些任务适用于 CentOS 机器:

- name: Check for outstanding reboot
  shell: needs-restarting > /dev/null || echo Reboot required
  when: ansible_distribution_major_version|int < 7
  register: result
- name: Check for outstanding reboot
  shell: needs-restarting -r > /dev/null || echo Reboot required
  when: ansible_distribution_major_version|int >= 7
  register: result
- name: Report reboot
  debug: msg="{{ result.stdout_lines }}"

结果:

TASK [Check for outstanding reboot] ***********************************************************************************
skipping: [host1]
skipping: [host2]
skipping: [host5]
changed: [host3]
changed: [host4]

TASK [Check for outstanding reboot] ***********************************************************************************
skipping: [host3]
skipping: [host4]
changed: [host2]
changed: [host1]
changed: [host5]

TASK [Report reboot] **************************************************************************************************
fatal: [host3]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'dict object' has no attribute 'stdout_lines'\n\nThe error appears to have been in '/path/to/updates.yml': line 52, column 5, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n    register: result\n  - name: Report reboot\n    ^ here\n\nexception type: <class 'ansible.errors.AnsibleUndefinedVariable'>\nexception: 'dict object' has no attribute 'stdout_lines'"}
ok: [host1] => {
    "msg": [
        "Reboot required"
    ]
}
fatal: [host4]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'dict object' has no attribute 'stdout_lines'\n\nThe error appears to have been in '/path/to/updates.yml': line 52, column 5, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n    register: result\n  - name: Report reboot\n    ^ here\n\nexception type: <class 'ansible.errors.AnsibleUndefinedVariable'>\nexception: 'dict object' has no attribute 'stdout_lines'"}
ok: [host2] => {
    "msg": [
        "Reboot required"
    ]
}
ok: [host5] => {
    "msg": [
        "Reboot required"
    ]
}
        to retry, use: --limit @/path/to/updates.retry

如您所见,两个检查任务都将结果存储在一个名为“result”的变量中,但只有第二个任务中的主机变量(带有ansible_distribution_major_version|int >= 7)被填充,从而导致错误消息。似乎第二个检查任务取消了前一个任务的结果。

是否可以保留两个任务的结果?还是我必须复制报告任务并将版本检查添加到两者?我宁愿把报告放在一个地方。

Ansible 版本是 2.4.4.0

ansible
  • 1 个回答
  • 20363 Views
Martin Hope
Gerald Schneider
Asked: 2018-04-20 01:11:32 +0800 CST

直接指定清单文件时,ansible-playbook 2.5 找不到组变量

  • 1

我一直在为一些一次性任务使用 ansible 脚本,例如在配置 VM 后进行首次设置。

我有一个创建临时库存文件的脚本,使用它来运行 ansible playbook,然后删除临时文件:

INVENTORY=$(mktemp /tmp/inst-inventory.XXXXXX)
echo "[$FLAVOR]" > $INVENTORY
echo "$HOSTNAME user_password='$USER_PASSWORD' admin_password='$ADMIN_PASSWORD'" >> $INVENTORY
ansible-playbook -i $INVENTORY `dirname $0`/firstsetup_$FLAVOR.yml --become
rm $INVENTORY

这非常有效,但是自从将 ansible 从 2.4 升级到 2.5 后,剧本再也找不到group_vars目录中定义的变量了。

$ playbooks/firstsetup.sh HOSTNAME ubuntu
Password for localadmin: PASSWORD

Running ansible-playbook firstsetup_ubuntu.yml on HOSTNAME

PLAY [ubuntu] *********************************************************************************************************

TASK [Gathering Facts] ************************************************************************************************
fatal: [HOSTNAME]: FAILED! => {"msg": "The field 'become_pass' has an invalid value, which includes an undefined variable. The error was: 'ubuntu_inisc_initialpass' is undefined"}
        to retry, use: --limit @/home/geschnei/playbooks/firstsetup_ubuntu.retry

PLAY RECAP ************************************************************************************************************
HOSTNAME                    : ok=0    changed=0    unreachable=0    failed=1

这是在我对常规清单文件中列出的主机运行相同的剧本时undefined variable定义并找到的。~/.ansible/group_vars/ubuntu.yml

Ansible 2.5的路线图列出:

添加选项来为临时、库存和控制台设置剧本目录以允许“相对路径加载”

这听起来可能是相关的,但我无法找到有关它的更多具体信息。2.5 移植指南也没有提到任何相关内容。

我必须配置什么才能使 ansible-playbookgroup_vars再次找到文件?

ansible-playbook
  • 1 个回答
  • 1461 Views
Martin Hope
Gerald Schneider
Asked: 2017-11-14 23:15:02 +0800 CST

使用 Ansible 包管理显示更新的包

  • 7

我有一个简单的 Ansible 剧本,用于在我管理的所有服务器上运行更新:

- hosts: ubuntu
  tasks:
  - name: install all updates
    apt:
      upgrade: dist
      update_cache: yes
      autoremove: yes
      autoclean: yes
- hosts: centos
  tasks:
  - name: install all updates
    yum:
      name: '*'
      update_cache: yes
      state: latest
# use debug to show the output
    register: result
  - name: Show Output
    debug: msg="{{ result.stdout_lines }}"

有什么方法可以让 Ansible 向我展示在此过程中更新了哪些包?apt和yum模块都没有为此提供选项。

目前使用的 Ansible 版本是 2.4。

ansible
  • 2 个回答
  • 14211 Views
Martin Hope
Gerald Schneider
Asked: 2017-01-12 02:05:58 +0800 CST

在 apache 上使用 ldap auth 调试超时

  • 5

几个月来,我一直在尝试调试 Apache 的超时问题。

该模式如下所示:

在新会话的每个第一个请求(或在最后一个请求之后的一段时间后)浏览器会立即要求提供凭据,然后使用基本身份验证发送请求。然后服务器在发送结果之前正好等待 1 分钟。

在此处输入图像描述

随后的请求会立即得到答复,这只发生在一段时间后的请求(尚无法准确定位,在 5 到 15 分钟之间)。

等待时间可精确重现 60 秒这一事实对我来说就像是超时。如果我取消请求并点击重新加载,我会立即获得请求的 URL。

由于密码提示也会立即出现,我可以排除客户端和服务器之间的 SSL 握手问题,或者那条腿上的 DNS 问题。如果我请求 PHP 脚本或空白文本文件并不重要,这也排除了服务器上的脚本问题。我猜验证过程的结果会被缓存一段时间,因此后续请求不需要它。

请注意,身份验证总是成功的,所以我也可以排除“域控制器没有回答”的问题。

Apache 2.4 在 Windows Server 2012 R2 上运行。它是为 LDAP 身份验证配置的:

<Location />
    AuthType Basic
    AuthName "AD Login"
    AuthBasicProvider ldap
    LDAPReferrals Off
    #AuthLDAPUrl ldap://dc01.domain.de:3268/dc=ad,dc=domain,dc=de?sAMAccountName?sub?(objectClass=*)
    #AuthLDAPUrl ldap://ad.domain.de:389/dc=ad,dc=domain,dc=de?sAMAccountName?sub?(objectClass=*) STARTTLS
    AuthLDAPUrl ldap://ad.domain.de:389/dc=ad,dc=domain,dc=de?sAMAccountName?sub?(objectClass=*) TLS
    AuthLDAPBindDN "service@domain.de"
    AuthLDAPBindPassword "secret"
    Require valid-user
    Require all denied
</Location>

如您所见,我尝试了与域控制器的不同连接类型,我使用哪种加密方法似乎并不重要,或者我是否传递加密。

ad.domain.de 解析到多个域控制器,但如果我连接到特定的 DC,行为是相同的。

错误日志中没有条目LogLevel info,我还在犹豫是否将其增加到debug,因为我从经验中知道我无法筛选生成的调试信息。

有什么我错过的东西可以用来调试问题,还是我必须通过调试级别日志记录?

active-directory timeout apache-2.4 mod-auth-ldap
  • 1 个回答
  • 7245 Views
Martin Hope
Gerald Schneider
Asked: 2016-02-25 01:21:41 +0800 CST

具有单个集群的 VMware Integrated OpenStack

  • 1

我目前正在部署 VMware Integrated OpenStack 以进行测试安装,稍后将投入生产。

在当前阶段,我们有 3 台 ESXi 主机,稍后会添加更多。我将所有三台主机配置为一个集群,因为我(显然错误地)阅读了建议使用三个集群的安装文档,但可以使用一个集群。

集群当前正在运行 vCenter 实例和 VIO 管理 vApp。

在部署 OpenStack 实例时,我无法选择集群作为计算集群,显然是因为它已被用作管理集群。

所以,看来我需要:

  • 具有至少三台主机的管理集群
  • 具有至少一个主机的计算集群

是否可以覆盖测试环境的这些要求?

vmware-esxi
  • 1 个回答
  • 253 Views
Martin Hope
Gerald Schneider
Asked: 2014-12-21 14:33:01 +0800 CST

使用 Windows Server 2012 R2 的 OpenVPN 站点到站点 VPN 隧道

  • 1

这是我的客户设置:

         Site A                                     Site B
     192.168.2.0/24                             192.168.0.0/24
Client A1 --|-- Server A                    Server B --|-- Client B1
            |   (192.168.2.2)           (192.168.0.2)  |
            |   (10.8.0.6)                 (10.8.0.1)  |
Client A2 --|-- Router A ---- Internet ---- Router B --|-- Client B2
            |   (192.168.2.1)         (192.168.0.254)  |
Client A3 --|                                          |-- Client B3

服务器 A 通过 OpenVPN 连接到服务器 B,以将两个站点相互连接。服务器 A 和服务器 B 是 Windows Server 2003,现在重新安装了 Windows 2012 R2。现在,用于 2003 配置的路由不再起作用。

我在服务器上添加了以下路由:

Server A: 192.168.0.0 mask 255.255.255.0 gw 10.8.0.1
Server B: 192.168.2.0 mask 255.255.255.0 gw 10.8.0.6

通过 DHCP 推送到客户端的路由:

Clients A: 192.168.0.0 mask 255.255.255.0 gw 192.168.2.2
           default gw 192.168.2.1
Clients B: 192.168.2.0 mask 255.255.255.0 gw 192.168.0.2
           default gw 192.168.0.254

服务器 A 上的 OpenVPN 配置(OpenVPN 客户端)

client
dev tun
proto udp
remote dyndns.example.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert server-sb.crt
key server-sb.key
remote-cert-tls server
comp-lzo
verb 3

服务器 B 上的 OpenVPN 配置(OpenVPN 服务器)

port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key  # This file should be kept secret
dh dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
client-to-client
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3

平:

  • 服务器 A -> 10.8.0.1 正常
  • 服务器 B -> 10.8.0.6 正常
  • 服务器 A -> 192.168.2.2 失败
  • 服务器 B -> 192.168.0.2 失败
  • 任何设备 A -> 任何设备 B 失败
  • 任何设备 B -> 任何设备 A 失败

在测试期间,所有 Windows 机器上的防火墙都被禁用。我的诊断是 VPN 隧道有效,但问题可能是 OpenVPN 中的设置阻止了路由,或者我的路由表中的某些内容已关闭。

我很确定这与 Windows 2003 的配置相同,每个设备都可以访问两个站点上的所有其他设备。

路由和远程访问中启用了 IPv4 转发和 LAN 路由。

routing
  • 1 个回答
  • 11383 Views
Martin Hope
Gerald Schneider
Asked: 2014-06-25 00:26:21 +0800 CST

本地化 ownCloud 主题

  • 3

是否可以本地化被 ownCloud 中的自定义主题覆盖的文件?

根据bugtracker 中的这个问题,您可以通过将主题文件放在您自己的主题文件夹中并对其进行编辑来覆盖它们。对于电子邮件模板,当您与某人共享文件时发送的电子邮件模板如下所示:

print_unescaped($l->t("Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n", array($_['user_displayname'], $_['filename'], $_['link'])));

这依赖于本地化功能,因此当我更改此文本时,它只会以英语显示,因为新文本在语言文件中不可用。

我在 中找到了本地化文件<owncloud>/core/l10n/de_DE.php,如下所示:

$TRANSLATIONS = array(
"%s shared »%s« with you" => "%s hat »%s« mit Ihnen geteilt",
"Couldn't send mail to following users: %s " => "An folgende Benutzer konnte keine E-Mail gesendet werden: %s",
// ...
);

我假设我也可以将此文件复制到我的主题目录并添加新文本的翻译,但那样我会丢失原始本地化文件中的未来更改。

我想要的是可以$TRANSLATIONS在我的主题目录中将条目附加(并且最好覆盖)到数组中。

关于主题的官方文档不是最新的(看起来它是从以前的版本中复制而来的,没有适应变化)并且根本不包括本地化。关于翻译的文档也没有帮助。

localization
  • 1 个回答
  • 2274 Views
Martin Hope
Gerald Schneider
Asked: 2014-03-05 01:20:22 +0800 CST

在虚拟子目录中禁用 Apache 基本身份验证

  • 4

我有一个使用 Basic Auth 完全锁定的网络服务器

<Location />
    AuthType Basic
    # [...] rest of basic auth stuff
    require valid-user
    order deny,allow
    deny from all
    Satisfy any
</Location>

没有身份验证可以访问一个子目录:

<Location /public>
  allow from all
  Satisfy any
</Location>

这工作正常。现在我想允许在不登录的情况下访问一些使用 mod_rewrite 访问的脚本:

RewriteRule ^phonebook/show/(.+)$ /quicksearchShow.php?uid=$1 [NC]
RewriteRule ^phonebook/(.+)$ /quicksearch.php?s=$1 [NC]
RewriteRule ^phonebook$ /quicksearch.php [NC]

我尝试的一些方法:

<Location ~ "/phonebook*">
    Allow from all
    Satisfy Any
</Location>

<Location /phonebook>
    Allow from all
    Satisfy Any
</Location>

<LocationMatch "^phonebook.*">
    Allow from all
    Satisfy Any
</LocationMatch>

这些选项都不起作用。我假设因为/phonebook不是服务器上的实际目录。所以我尝试了一些<Files>指令的变体:

<FilesMatch "/quicksearch.*">
    Allow from all
    Satisfy Any
</FilesMatch>

<FilesMatch "^quicksearch.*">
    Allow from all
    Satisfy Any
</FilesMatch>

<Files "quicksearch.php">
    Allow from all
    Satisfy Any
</Files>

但也没有运气。

那么,如何为通过 mod_rewrite 映射的特定“虚拟”目录设置选项?

apache-2.2
  • 1 个回答
  • 4481 Views
Martin Hope
Gerald Schneider
Asked: 2013-08-22 21:46:20 +0800 CST

无法ping通网关

  • 0

我用运行 ESXi 5.1 的新服务器替换了老化的文件服务器,并将我的文件服务器迁移到运行在其上的虚拟机中。现在我对这个虚拟机有以下问题:

  • 我通过 DHCP 获得了正确的 IP(通过 MAC 地址保留有效)
  • 我无法 ping 网关 (10.0.0.1)
  • 我可以 ping DHCP/DNS 服务器 (10.0.0.2)
  • 我可以ping通网络上的其他机器
  • ping 互联网上的主机我可以解析它的 IP 地址(由于可访问的 DNS 服务器),但无法 ping 解析的主机

将 IP 更改为不同的静态 IP 后,我可以 ping 网关以及互联网。

我使用的是单个子网(10.0.0.0/24),机器上的路由表是正确的。

网关是 Linksys E4200 路由器(带有原始固件)。

ip
  • 2 个回答
  • 3150 Views
Martin Hope
Gerald Schneider
Asked: 2013-07-05 01:54:24 +0800 CST

如何将内容添加到 mediawiki 中的所有页面?

  • 3

TL;DR:如何向每个页面的内容(不是标题或全局模板)添加文本(通知)?

(非常)长问题的背景:我计划将 MediaWiki 迁移到另一个 wiki。wiki 的内容是从之前更旧的 wiki 迁移而来的(生成了有关格式的错误),随着时间的推移而增长,现在大部分已经过时。这就是为什么我们要从空白 wiki 开始并手动迁移内容,丢弃和/或更新过时的页面。

为了使这更容易,我想在每个现有页面的顶部添加一个文本块,特别是一个模板,通知该页面尚未迁移或丢弃,以及收集所有这些页面的类别(例如类别:migration_pending) . 然后,每个用户都应该浏览他负责的页面,将内容复制到新的 wiki 并将模板更改为另一个模板,将页面标记为已迁移 (category:migration_done) 或丢弃 (category:migration_discarded)。通过这种方式,应该可以在不忘记任何重要内容的情况下获得一个干净、最新的 wiki。

php
  • 1 个回答
  • 1416 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve