我有一个 FreeBSD 主机和一些监狱,主机和监狱中的输出freebsd-version -u
是12.2-STABLE
.
在主机中输出uname -K
和pkg -vv | grep OSVERSION
匹配 1202505
但在监狱内我得到OSVERSION = 1201512;
我更新了主机和监狱,但仍然找不到错误的原因。
有任何想法吗?
我有一个 FreeBSD 主机和一些监狱,主机和监狱中的输出freebsd-version -u
是12.2-STABLE
.
在主机中输出uname -K
和pkg -vv | grep OSVERSION
匹配 1202505
但在监狱内我得到OSVERSION = 1201512;
我更新了主机和监狱,但仍然找不到错误的原因。
有任何想法吗?
我已经编译了带有在监狱中运行的blacklistd支持的postfix。
在主主机 (FreeBSD 12.1)blascklistd
上运行此配置:
# Blacklist rule
# adr/mask:port type proto owner name nfail disable
[local]
submission stream * * * 2 24h
如何配置postfix
通知blacklistd
在主主机上运行?
如何运行/配置syslog-ng
仅高于安全日志级别/优先级的日志WARNING
?
我想丢弃NOTICES
像:
Destination timeout has elapsed, closing connection; fd='36'
从文档中:(https://www.syslog-ng.com/technical-documents/doc/syslog-ng-open-source-edition/3.22/administration-guide/17#TOPIC-1209129)我发现了这个:
syslog-ng OSE 应用程序从 internal() 源发送以下消息类型:
致命:优先级值:关键(2),设施值:系统日志(5)
错误:优先级值:错误(3),设施值:系统日志(5)
警告:优先级值:警告(4),设施值:系统日志(5)
notice:优先级值:notice (5),Facility 值:syslog (5)
info:优先级值:info (6),Facility 值:syslog (5)
但找不到如何将日志级别设置为warning
我正在使用Hetzner的 vSwitch和 IPv6 网络,我已经配置了CARP并按预期工作,但我注意到的问题是,因为我的 IPv6 配置或 vSwitch,需要一分钟或更长时间才能开始发送包到新可用的 (MASTER) 服务器。
对于没有 的测试CARP
,在其中一台服务器中,我创建了一个别名,例如:
ifconfig vlan0 inet6 2a01:4f8:fff0:60:dead:beef::1/64 alias
从终端中的另一台主机开始ping6 2a01:4f8:fff0:60:dead:beef::1
,在通过接收一些回显回复检查地址是否可访问后,我删除别名:
ifconfig vlan0 inet6 2a01:4f8:fff0:60:dead:beef::1/64 -alias
Ping 按预期停止,然后我在另一台服务器中添加相同的别名:
ifconfig vlan0 inet6 2a01:4f8:fff0:60:dead:beef::1/64 alias
大约一分钟或更长时间后,运行 ping IP 地址的终端开始回复。
因此想知道如何加快分配 IP 地址的时间,我认为在 IPv6 中这与“邻居发现”有关,但由于我使用的是静态地址,因此可能并非如此。
以防万一我使用 IPv4 进行测试,并且响应几乎是在添加 IP 别名或删除它之后立即响应,我希望使用 IPv6 实现相同的效果,以便我可以利用 CARP。
我正在捕捉user-agent
使用:
http-request capture req.hdr(User-Agent) len 192
然后尝试创建这样的自定义JSON
日志格式:
log-format '{"User-Agent":%{+Q,+E}[capture.req.hdr(0)]}'
它可以工作,但是当用户代理包含方括号时,例如:
Dalvik/1.6.0 (Linux; U; Android 4.4.4; Ixion X LTE 4.5 [Build KTU84P])
该选项+E
转义方括号并阻止 JSON,它创建如下内容:
"User-Agent": "Dalvik/1.6.0 (Linux; U; Android 4.4.4; Ixion X LTE 4.5 \[Build KTU84P])"
当 UA 包含额外的引号时没有问题:
"User-Agent": "this \"works\" fine"
因此想知道是否有一种方法可以指定仅转义双引号或替代方法以使日志格式JSON
兼容
有多种创建监狱的方法和工具,现在磁盘空间变得越来越便宜,创建一个完整的监狱(已经编译了一个世界)只是几秒钟的事情:
zfs create tank/jails/sandbox
zfs create tank/jails/sandbox/home
zfs create tank/jails/sandbox/tmp
make installworld DESTDIR=/jails/sandbox SRCCONF=/etc/src-jail.conf
为了更新现有的监狱,我目前正在使用类似的东西:
for jail in /jails/*; do
make installworld delete-old delete-old-libs DESTDIR=$jail
done
它有效,但除了是破坏性过程之外,它还意味着“停机时间”,因为如果需要,无法回滚。
有一些方法描述了如何创建基本图像,然后nullfs
使用符号链接安装只读骨架或其他方法,但在所有可能的选项中,我想知道您如何处理滚动升级?
尽管如果主机使用的是 FreeBSD 11.2 并且现在已更新到 FreeBSD 12 时使用的工具,我想例如只需要运行一次:
make installworld DESTDIR=/jails/new-base12 SRCCONF=/etc/src-jail.conf
然后每个监狱要么提升(zfs
)或修改自定义/etc/fstab.jailname
(nullfs
),这样一旦完成,我就可以做一个/etc/rc.d/jails restart
并最大限度地减少停机时间。
要遵循的任何最佳实践或方法,请记住目标是最大程度地减少停机时间,并尽可能简化升级或多个监狱?
主机/来宾都使用 FreeBSD 11.1,我使用vm-byhbe创建了 VM 。
这是主机配置/etc/rc.conf
ifconfig_igb0_ipv6="inet6 2a01:4f8:150:84ec::1 prefixlen 64"
ipv6_activate_all_interfaces="YES"
ipv6_defaultrouter="fe80::1%igb0"
rtadvd_enable="YES"
在/etc/rtadvd.conf
igb0:\
:addrs#1:addr="2a01:4f8:150:84ec::"\
:prefixlen#64\
:tc=ether\
:rltime#0\
:rdnss="2a01:4f8:150:84ec::1":
这是bhyve客人/etc/rc.conf
ifconfig_vtnet0_ipv6="inet6 accept_rtadv"
ipv6_defaultrouter="fe80::1%vtnet0"
rtsold_enable="YES"
这是ifconfig bridge0
主机上的输出:
bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
description: vm-public
ether 02:e0:41:b7:a4:00
nd6 options=1<PERFORMNUD>
groups: bridge
id 00:00:00:00:00:00 priority 0 hellotime 2 fwddelay 15
maxage 20 holdcnt 6 proto rstp maxaddr 2000 timeout 1200
root id 00:00:00:00:00:00 priority 0 ifcost 0 port 0
member: tap0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
ifmaxaddr 0 port 7 priority 128 path cost 2000000
member: igb0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
ifmaxaddr 0 port 1 priority 128 path cost 2000000[/CODE]
我发现的第一个问题是,在启动 VM 后,需要一段时间才能获得 IP,在某些情况下我需要重新启动rtadvd才能获得 IP,我在日志中的错误是这个:
rtadvd[1871]: <getconfig> inet_pton failed for 2a01:4f8:150:84ec::
VM 获得 IP 后,我可以 ping 其他主机,例如2001:4860:4860::8844,但不能 ping 主机本身,因此我无法解析到任何域,这是因为我在主机上使用unbound并且是我定义的 DNS (/etc/resolve.conf)。
到目前为止,我发现解决此问题的唯一方法是从主机 ping 到客户机上的 IPv6,之后一切都按预期工作。
有什么想法可能是错的吗?为了测试,我禁用了pf ( pfctl -d
) 但仍然无法正常工作。
提前致谢。
我正在尝试在FreeBSD 11服务器上设置一些 IPV6 地址,有人告诉我将此 IP 用作网关:
2001:4ba0:fffd:1:beef::1 /128
我的地址是:
2001:4ba0:fffd:0063::0 /64
我试过这个:
ipv6_activate_all_interfaces="YES"
ipv6_defaultrouter="2001:4ba0:fffd:1:beef::1"
ifconfig_bge0_ipv6="inet6 2001:4ba0:fffd:0063::1 prefixlen 64"
但我收到这条消息:
route: writing to routing socket: Network is unreachable
add net default: gateway 2001:4ba0:fffd:1:beef::1 fib 0: Network is unreachable
通过这样做,npd -a
我得到了这个:
> ndp -a
Neighbor Linklayer Address Netif Expire S Flags
2001:4ba0:fffd:63::1 2c:44:fd:9a:3f:90 bge0 permanent R
fe80::1%bge0 28:92:4a:cd:08:18 bge0 22h8m42s S R
fe80::2a92:4aff:fecd:818%bge0 28:92:4a:cd:08:18 bge0 23h27m31s S R
fe80::2e44:fdff:fe9a:3f90%bge0 2c:44:fd:9a:3f:90 bge0 permanent R
然后我尝试用作默认路由器fe80::1.
:
ipv6_activate_all_interfaces="YES"
ipv6_defaultrouter="fe80::1%bge0"
ifconfig_bge0_ipv6="inet6 2001:4ba0:fffd:0063::1 prefixlen 64"
当使用链路本地 fe80::1
地址作为网关时,IPV6 工作。
我想知道使用链接本地地址作为网关的优点/缺点是什么,以及如何使用提供的网关或使用两者都是一样的?
在Google Compute 引擎上使用FreeBSD 11创建带有 openvpn 和 l2tp (mpd) 的 vpn 时,我注意到网络速度非常慢,首先我禁用了 TSO:
ifconfig vtnet0 -tso
但是没有用,因此我通过将此行添加到文件中来禁用完整的vtnet 校验和卸载:/boot/loader.conf
hw.vtnet.csum_disable="1"
这样做之后,网络速度明显提高。
但是想知道这是否会引发其他问题,或者完全可以禁用它作为虚拟环境?
我已经使用单个前端和后端配置了 HAProxy,从统计信息页面我看到以下统计信息:
system limits: memmax = unlimited; ulimit-n = 20013
maxsocs = 20013; maxconn = 10000; maxpripes =0
current conns = 361; current pipes 0/0; conn rate = 27/sec
Running tasks: 1/366; idle = 98%
在“会话”部分的前端,我看到:
Cur: 360
Max: 427
Limit 2000
一个在后端:
Cur: 0
Max: 3
Limit: 2000
我不明白的事情是为什么如果当前连接是:361,后端有0。
由于设置原因,HAproxy 是否将传入连接限制/排队以保护后端timeout queue
?
如何知道前端联系后端的时间?
这是我正在使用的测试配置:
global
maxconn 10000
spread-checks 3
log /var/run/log local0 notice
daemon
tune.ssl.default-dh-param 2048
ssl-default-bind-options no-sslv3 no-tls-tickets
ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:HIGH:!aNULL:!MD5:!DSS
ssl-default-server-options no-sslv3
ssl-default-server-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:HIGH:!aNULL:!MD5:!DSS
defaults
balance roundrobin
option http-server-close
option abortonclose
option dontlognull
mode http
timeout check 3s
timeout client 30s # Client and server timeout must match the longest
timeout connect 5s
timeout http-keep-alive 10s
timeout http-request 10s # A complete request may never take that long.
timeout queue 10s # Don't queue requests too long if saturated.
timeout server 10s # Time we may wait for a response from the server.
retries 3
log global
errorfile 408 /dev/null
frontend http-in
bind *:80
option httplog
option forwardfor if-none
default_backend nodes-http
backend nodes-http
option httpchk GET /
http-check disable-on-404
rspirep ^Cache-Control Cache-Control:\ public,\ max-age=60,\ must-revalidate
server node1 :8000 maxconn 2000 check
提前致谢。
我在做一个 512 内存的 VPS,我安装了 mysql,运行命令top
,发现SIZE
for mysql 的值为 638M:
last pid: 2023; load averages: 0.17, 0.19, 0.21 up 0+03:05:43 19:26:01
27 processes: 1 running, 26 sleeping
CPU: 0.4% user, 0.0% nice, 1.2% system, 0.0% interrupt, 98.4% idle
Mem: 60M Active, 216M Inact, 94M Wired, 59M Buf, 104M Free
Swap: 1024M Total, 1024M Free
PID USERNAME THR PRI NICE SIZE RES STATE TIME WCPU COMMAND
1324 mysql 30 20 0 638M 168M uwait 2:12 0.00% mysqld
从手册页我得到了这个:
SIZE 是进程的总大小(文本、数据和堆栈)
VPS 上只有 512M 的 RAM,虽然我正在消耗所有内存,但基于这MEM
条线似乎不是:
Mem: 60M Active, 216M Inact, 94M Wired, 59M Buf, 104M Free
因此,我想知道如何计算和如何正确解释它们的更多SIZE
细节RES
。
有没有办法监控/获取当前值maxconn
并基于该值添加更多实例?
目前,我设置了 3 个 HAProxy,maxconn 1000
并且在统计页面甚至无法访问时重新缓存了限制。
所以想知道/防止当我接近达到该限制时如何水平扩展。
有任何想法吗?
我目前正在使用runit + svlogd来监督一些应用程序,但是当部署到多台机器时,我需要将日志集中/统一在一个地方以简化事情,否则登录到每台机器会使事情变得非常复杂。
而不是通过 syslog 发送所有主机日志,例如:
*.* remote.log.host
我只想发送与应用程序相关的日志,理论上 svlogd 能够做到这一点,来自文档:
ua.b.c.d[:port]
tells svlogd to transmit the first len characters of selected log messages to the IP address a.b.c.d, port number port. If port isn’t set, the default port for syslog is used (514). len can be set through the -l option, see below. If svlogd has trouble sending udp packets, it writes error messages to the log directory. Attention: logging through udp is unreliable, and should be used in private networks only.
Ua.b.c.d[:port]
is the same as the u line above, but the log messages are no longer written to the log directory, but transmitted through udp only. Error messages from svlogd concerning sending udp packages still go to the log directory.
我的配置文件的内容 /service/my-service/log/main/config
:
u127.0.0.1:5514
或者
U127.0.0.1:5514
为了测试,我创建了一个非常基本的UDP 服务器/客户端,但由于未知原因svlogd
没有发送日志,我也尝试netcat
使用它:
nc -ul 5514
我为此使用的日志运行脚本/service/my-service/log/run
:
#!/bin/sh
exec svlogd -tt ./main
我得到的唯一错误消息是:
warning: failure sending through udp:
我一直在使用的解决方法是logger
在日志运行脚本中调用,例如:
#!/bin/sh
exec chpst -u nobody logger -i -h remote.host.tld -P 42060 -t my-app
但是通过这种方法,我失去了 svlogd 的所有优势,除了sv status .
总是开/关(1,0),因为记录器不像守护进程那样运行。
最后,我想继续获得来自 svlogd 的日志,但可以让工作成为ua.b.c.d[:port]
选项。
更新:做一个 ktrace 这就是我得到的:
4909 svlogd CALL socket(PF_INET,SOCK_DGRAM,IPPROTO_IP)
4909 svlogd RET socket 7
4909 svlogd CALL fcntl(0x7,F_GETFL,0)
4909 svlogd RET fcntl 2
4909 svlogd CALL fcntl(0x7,F_SETFL,0x6<O_RDWR|O_NONBLOCK>)
4909 svlogd RET fcntl 0
4909 svlogd CALL sendto(0x7,0x609580,0x3c,0,0x609c3c,0x10)
4909 svlogd STRU struct sockaddr { AF_UNSPEC, unknown address family }
4909 svlogd RET sendto -1 errno 47 Address family not supported by protocol family
4909 svlogd CALL write(0x6,0x609760,0x62)
4909 svlogd GIO fd 6 wrote 98 bytes
"warning: failure sending through udp:
STRU struct sockaddr { AF_UNSPEC, unknown address family }
有任何想法吗 ?