Как перенаправить трафик между пространствами имен Linux в сети?

Это ESC +. или ALT +.

mkdir mydir
cd [here you press ESC+.] mydir

См. Также: Как использовать аргументы из предыдущей команды? | Stack Overflow

3
08.09.2017, 20:31
1 ответ

Первый :Я не думаю, что вы можете добиться этого, используя 127.0.0.0/8 и/или петлевой интерфейс (вроде lo ). Вы должны использовать некоторые другие IP-адреса и интерфейсы, потому что для 127.0.0.0/8 и для обратной связи есть определенные вещи.

Тогда, безусловно, существует более одного метода, но вот пример:

# ip netns add vpn
# ip link add name vethhost0 type veth peer name vethvpn0
# ip link set vethvpn0 netns vpn
# ip addr add 10.0.0.1/24 dev vethhost0
# ip netns exec vpn ip addr add 10.0.0.2/24 dev vethvpn0
# ip link set vethhost0 up
# ip netns exec vpn ip link set vethvpn0 up
# ping 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.134 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.100 ms

Первая команда создает из воздуха пару виртуальных интерфейсов Ethernet, соединенных виртуальным кабелем Ethernet. Вторая команда перемещает один из этих интерфейсов в netns vpn. Считайте это эквивалентом таких вещей, как socketpair (2 )или pipe (2 ):процесс создает пару, затем разветвляется, и каждый процесс сохраняет только один конец пары, и они могут взаимодействовать.

Обычно (LXC, вирт -менеджер,...)Также используется мост, позволяющий поместить все в одну и ту же локальную сеть, когда у вас много сетей.

Когда это установлено, для хоста это похоже на любой маршрутизатор. Включите переадресацию ip (если можете, ограничьте :она нужна хотя бы для vethhost0 и основного интерфейса):

# echo 1 > /proc/sys/net/ipv4/conf/all/forwarding

Добавьте правило DNAT, например:

# iptables -t nat -A PREROUTING ! -s 10.0.0.0/24 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.0.0.2

Теперь вы можете добавить маршрут по умолчанию внутри vpn с помощью:

# ip netns exec vpn ip route add default via 10.0.0.1

Или вместо этого добавьте правило SNAT, чтобы все воспринималось как поступающее с 10.0.0.1 внутри vpn.

# iptables -t nat -A POSTROUTING -d 10.0.0.2/24 -j SNAT --to-source 10.0.0.1

После этого вы можете выполнять тестирование с любого другого хоста, но не с самого хоста. Для этого также добавьте правило DNAT, аналогичное предыдущему DNAT, но в OUTPUT и измененное (, иначе любое исходящее http-соединение также будет изменено )на ваш собственный IP-адрес. Допустим, ваш IP 192.168.1.2:

# iptables -t nat -A OUTPUT -d 192.168.1.2 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.0.0.2

Теперь это будет работать даже при подключении с хоста к самому себе если вы используете не петлевой IP-адрес, а любой другой IP-адрес, принадлежащий хосту с правилом nat, как указано выше. Допустим, ваш IP 192.168.1.2:

# ip netns exec vpn nc -l -s 10.0.0.2 -p 80 &
[1] 10639
# nc -vz 192.168.1.2 80
nc: myhost (192.168.1.2) 80 [http] open
#
[1]+  Done                    ip netns exec vpn nc -l -s 10.0.0.2 -p 80
11
27.01.2020, 21:11

Теги

Похожие вопросы