В общем наваял я тут такой юнит для systemd:
[Unit]
Description=OpenVPN inside %I network namespace
After=syslog.target network.target
[Service]
PrivateTmp=true
Type=forking
PIDFile=/var/run/openvpn/%i.pid
ExecStartPre=/bin/ip netns add vpn
ExecStartPre=/bin/ip -netns vpn addr add 127.0.0.1/8 dev lo
ExecStartPre=/bin/ip -netns vpn link set lo up
ExecStartPre=/bin/ip link add vpn0 type veth peer name vpn1
ExecStartPre=/bin/ip link set vpn0 up
ExecStartPre=/bin/ip link set vpn1 netns vpn up
ExecStartPre=/bin/ip addr add 10.200.200.1/24 dev vpn0
ExecStartPre=/bin/ip -netns vpn addr add 10.200.200.2/24 dev vpn1
ExecStartPre=/bin/ip -netns vpn route add default via 10.200.200.1 dev vpn1
ExecStartPre=/sbin/iptables -A INPUT ! -i vpn0 -s 10.200.200.0/24 -j DROP
ExecStartPre=/sbin/iptables -t nat -A POSTROUTING -s 10.200.200.0/24 -o wl+ -j MASQUERADE
ExecStartPre=/sbin/sysctl -q net.ipv4.ip_forward=1
ExecStartPre=/bin/mkdir -p /etc/netns/vpn
ExecStartPre=/bin/sh -c "echo 'nameserver 8.8.8.8' > /etc/netns/vpn/resolv.conf"
ExecStart=/bin/ip netns exec vpn /usr/sbin/openvpn --daemon --writepid /var/run/openvpn/%i.pid --cd /etc/openvpn/ --config %i.conf
ExecStopPost=/bin/rm -rf /etc/netns/vpn
ExecStopPost=/sbin/sysctl -q net.ipv4.ip_forward=0
ExecStopPost=/sbin/iptables -D INPUT ! -i vpn0 -s 10.200.200.0/24 -j DROP
ExecStopPost=/sbin/iptables -t nat -D POSTROUTING -s 10.200.200.0/24 -o wl+ -j MASQUERADE
ExecStopPost=/bin/ip link del vpn0
ExecStopPost=/bin/ip netns delete vpn
[Install]
WantedBy=multi-user.target
/bin/ip -netns vpn addr add 127.0.0.1/8 dev lo
setting the network namespace "vpn" failed: Invalid argument
ip netns
выдаёт:
RTNETLINK answers: Invalid argument
vpn
ip netns add vpn
, то юнит запускается и работает как и должен. Отсюда делаем вывод, что при создании сетевого пространства имён из юнита systemd что то происходит не так. Вопрос - что? Есть у кого идеи?sudo cast intelfx