История изменений
Исправление eternal_sorrow, (текущая версия) :
Вариант с двумя юнитами отработал как нужно, для желающих выкладываю оба юнита:
/etc/systemd/system/vpn-ns.service
[Unit]
Description=Network namespace for VPN
After=syslog.target network.target
StopWhenUnneeded=true
RefuseManualStart=true
RefuseManualStop=true
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/ip netns add vpn
ExecStart=/bin/ip -netns vpn addr add 127.0.0.1/8 dev lo
ExecStart=/bin/ip -netns vpn link set lo up
ExecStart=/bin/ip link add vpn0 type veth peer name vpn1
ExecStart=/bin/ip link set vpn0 up
ExecStart=/bin/ip link set vpn1 netns vpn up
ExecStart=/bin/ip addr add 10.200.200.1/24 dev vpn0
ExecStart=/bin/ip -netns vpn addr add 10.200.200.2/24 dev vpn1
ExecStart=/bin/ip -netns vpn route add default via 10.200.200.1 dev vpn1
ExecStart=/sbin/iptables -A INPUT ! -i vpn0 -s 10.200.200.0/24 -j DROP
ExecStart=/sbin/iptables -t nat -A POSTROUTING -s 10.200.200.0/24 -o wl+ -j MASQUERADE
ExecStart=/sbin/sysctl -q net.ipv4.ip_forward=1
ExecStart=/bin/mkdir -p /etc/netns/vpn
ExecStart=/bin/sh -c "echo 'nameserver 8.8.8.8' > /etc/netns/vpn/resolv.conf"
ExecStop=/bin/rm -rf /etc/netns/vpn
ExecStop=/sbin/sysctl -q net.ipv4.ip_forward=0
ExecStop=/sbin/iptables -D INPUT ! -i vpn0 -s 10.200.200.0/24 -j DROP
ExecStop=/sbin/iptables -t nat -D POSTROUTING -s 10.200.200.0/24 -o wl+ -j MASQUERADE
ExecStop=/bin/ip link del vpn0
ExecStop=/bin/ip netns delete vpn
[Install]
WantedBy=multi-user.target
[Unit]
Description=OpenVPN on %I inside network namespace
Requires=vpn-ns.service
After=syslog.target network.target vpn-ns.service
[Service]
PrivateTmp=true
Type=forking
PIDFile=/var/run/openvpn/%i.pid
ExecStart=/bin/ip netns exec vpn /usr/sbin/openvpn --daemon --writepid /var/run/openvpn/%i.pid --cd /etc/openvpn/ --config %i.conf
[Install]
WantedBy=multi-user.target
Исходная версия eternal_sorrow, :
Вариант с двумя юнитами отработал как нужно, для желающих выкладываю оба юнита:
/etc/systemd/system/vpn-ns.service
[Unit]
Description=Network namespace for VPN
After=syslog.target network.target
StopWhenUnneeded=true
RefuseManualStart=true
RefuseManualStop=true
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/ip netns add vpn
ExecStart=/bin/ip -netns vpn addr add 127.0.0.1/8 dev lo
ExecStart=/bin/ip -netns vpn link set lo up
ExecStart=/bin/ip link add vpn0 type veth peer name vpn1
ExecStart=/bin/ip link set vpn0 up
ExecStart=/bin/ip link set vpn1 netns vpn up
ExecStart=/bin/ip addr add 10.200.200.1/24 dev vpn0
ExecStart=/bin/ip -netns vpn addr add 10.200.200.2/24 dev vpn1
ExecStart=/bin/ip -netns vpn route add default via 10.200.200.1 dev vpn1
ExecStart=/sbin/iptables -A INPUT ! -i vpn0 -s 10.200.200.0/24 -j DROP
ExecStart=/sbin/iptables -t nat -A POSTROUTING -s 10.200.200.0/24 -o wl+ -j MASQUERADE
ExecStart=/sbin/iptables -t mangle -A POSTROUTING -j TTL --ttl-set 65
ExecStart=/sbin/sysctl -q net.ipv4.ip_forward=1
ExecStart=/bin/mkdir -p /etc/netns/vpn
ExecStart=/bin/sh -c "echo 'nameserver 8.8.8.8' > /etc/netns/vpn/resolv.conf"
ExecStop=/bin/rm -rf /etc/netns/vpn
ExecStop=/sbin/sysctl -q net.ipv4.ip_forward=0
ExecStop=/sbin/iptables -D INPUT ! -i vpn0 -s 10.200.200.0/24 -j DROP
ExecStop=/sbin/iptables -t nat -D POSTROUTING -s 10.200.200.0/24 -o wl+ -j MASQUERADE
ExecStop=/sbin/iptables -t mangle -D POSTROUTING -j TTL --ttl-set 65
ExecStop=/bin/ip link del vpn0
ExecStop=/bin/ip netns delete vpn
[Install]
WantedBy=multi-user.target
[Unit]
Description=OpenVPN on %I inside network namespace
Requires=vpn-ns.service
After=syslog.target network.target vpn-ns.service
[Service]
PrivateTmp=true
Type=forking
PIDFile=/var/run/openvpn/%i.pid
ExecStart=/bin/ip netns exec vpn /usr/sbin/openvpn --daemon --writepid /var/run/openvpn/%i.pid --cd /etc/openvpn/ --config %i.conf
[Install]
WantedBy=multi-user.target