在许多具有不同内核版本的服务器上具有相同的效果。
Iptables DNAT 规则有多种:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 12345 -j DNAT --to-destination 10.20.30.40:5678
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 23456 -j DNAT --to-destination 10.11.12.13:5789
....
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 34567 -j LOG --log-prefix 'natudp: '
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 34567 -j DNAT --to-destination 10.55.66.77:34567
Run Code Online (Sandbox Code Playgroud)
问题:UDP 规则不适用于来自 eth0 的传入请求。
它们的数据包和字节计数器的值为零。
简化(删除 dport)没有效果。
结果,请求被传递到过滤器/输入链而不是转发。
来自虚拟接口(tap、veth)的数据包不存在这样的问题 - 它们被预路由规则捕获。
TCP 则没有这样的问题。
UDP …
有一个守护进程可以从命令行和 systemctl 启动。
/etc/systemd/system/mydaemon.service 包含 ExecStart= 和 PIDFile= 所以 Systemd 可以肯定地检测到该服务是否正在运行:
[Unit]
After=network-online.target
[Service]
Type=simple
ExecStart=/usr/local/bin/mydaemon --no-fork
PIDFile=/var/run/mydaemon-%i.pid
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
为什么“systemctl status mydaemon”说守护程序即使正在运行也已停止?
如何教 systemd 守护进程不仅可以通过“systemctl start”运行,还可以直接运行?