ip netns add pr1;
ip link add pr1if0 type veth peer name pr1if1;
ip link set dev pr1if1 netns pr1;
ip link set pr1if0 up;
ip address add 1.1.1.1/32 dev pr1if0;
ip route add local 172.20.1.0 dev pr1if0;
ip route add 172.20.1.0/31 dev pr1if0 src 172.20.1.0;
ip netns exec pr1 ip link set lo up;
ip netns exec pr1 ip link set dev pr1if1 up;
ip netns exec pr1 ip address add 172.20.1.1/31 dev pr1if1;
ip netns exec pr1 ip route add default via 172.20.1.0 dev pr1if1 src 172.20.1.1;
iptables -t nat -A PREROUTING -p tcp -i pr1if0 -j REDIRECT --to-port 9040;
nc -lp 9040 -v -w 2 &
ip netns exec pr1 nc -v 45.45.45.45 45 -w 2;
iptables -tnat -F && iptables -tfilter -F && ip netns del pr1;
exit;
И так работает...
Выходит, что ip address делает чтото еще, кроме заполнения таблицы, хотя судя по strace, выполняют действия с тем же сокетом
«ip address add 172.16.20.20/24 dev veth0»:
sendmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"(\0\0\0\24\0\5\6\376\311\366Z\0\0\0\0\2\30\0\0\3\0\0\0\10\0\2\0\254\20\24\24"..., 40}], msg_controllen=0, msg_flags=0}, 0) = 40
* 40 bytes in buffer 0
| 00000 28 00 00 00 14 00 05 06 fe c9 f6 5a 00 00 00 00 (..........Z.... |
| 00010 02 18 00 00 03 00 00 00 08 00 02 00 ac 10 14 14 ................ |
| 00020 08 00 01 00 ac 10 14 14 ........ |
«ip route add local 172.16.20.16 dev veth1»:
sendmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{",\0\0\0\30\0\5\6t\315\366Z\0\0\0\0\2 \0\0\377\3\376\2\0\0\0\0\10\0\1\0"..., 44}], msg_controllen=0, msg_flags=0}, 0) = 44
* 44 bytes in buffer 0
| 00000 2c 00 00 00 18 00 05 06 74 cd f6 5a 00 00 00 00 ,.......t..Z.... |
| 00010 02 20 00 00 ff 03 fe 02 00 00 00 00 08 00 01 00 . .............. |
| 00020 ac 10 14 10 08 00 04 00 04 00 00 00 ............ |