Я уже создал разные псевдонимы IP (каждый с другим виртуальным Mac-адресом) таким образом в моей оболочке:
ip link add link eth0 address 00:11:11:11:11:11 eth0.1 type macvlan
ifconfig eth0.1 172.17.1.15/21 up
Я использовал eth0.1 вместо eth0: 1, потому что в противном случае он не работает с macvlan. Я знаю, что псевдоним IP записывается как: eth0: 1.
Установлено регулирование скорости до 10 Мбит / с на IP (или Mac Addr, я еще не знаю), и я изучаю его обход для благонамеренного проекта.
Теперь я хочу установить конкретный пункт назначения для каждого псевдонима IP, чтобы изучить регулирование скорости маршрутизатора. Теперь у него должно быть 10 Мбит / с на IP / соединение.
Маршрутизатор: 172.17.0.1/21
eth0> 172.17.1.14/21
eth0.1> 172.17.1.15/21
eth0.2> 172.17.1.16/21
Теперь мне нужно, чтобы eth0.1 был источником для доступа: URL (speedtest1Web).
И eth0.2 - источник доступа: URL (speedtest2Web).
iptables -t nat -A POSTROUTING -p tcp -s 172.17.1.15 -o eth0.1 -j SNAT --to-source xxx.xxx.xxx.xxx
или
iptables -t nat -I POSTROUTING -o eth0 -d xxx.xxx.xxx.xxx/32 -s 10.255.0.127 -j SNAT --to-source 172.17.1.15
где xxx.xxx.xxx.xxx = speedtest1Web
Правильно ли "-o eth0"? Или мне написать "-o eth0.1"?
Я безуспешно пробовал много подобных команд или, по крайней мере, у меня по-прежнему 10 Мбит / с для всех соединений вместо 10 Мбит / с на соединение (что предполагается сейчас с псевдонимом IP).
В вашем случае использование macvlan не требуется.
l1:~# ip link set up dev eth0
l1:~# ip address add 172.17.1.14/21 dev eth0
l1:~# ip address add 172.17.1.15/21 dev eth0
l1:~# ip address add 172.17.1.16/21 dev eth0
eth0
интерфейс: l1:~# ip -4 a ls dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 172.17.0.14/21 scope global eth0
valid_lft forever preferred_lft forever
inet 172.17.0.15/21 scope global secondary eth0
valid_lft forever preferred_lft forever
inet 172.17.0.16/21 scope global secondary eth0
valid_lft forever preferred_lft forever
l1:~# ip route add 0/0 via 172.17.0.1 src 172.17.0.14
l1:~# ip route list
default via 172.17.0.1 dev eth0 src 172.17.0.14
172.17.0.0/21 dev eth0 proto kernel scope link src 172.17.0.14
Использовать 172.17.0.15
как исходный адрес для 192.168.10.2
место назначения
l1:~# ip route add 192.168.10.2 via 172.17.0.1 src 172.17.0.15
Использовать 172.17.0.16
как исходный адрес для 192.168.11.2
место назначения
l1:~# ip r add 192.168.11.2 via 172.17.0.1 src 172.17.0.16
Проверьте таблицу маршрутизации:
l1:~# ip r ls
default via 172.17.0.1 dev eth0 src 172.17.0.14
172.17.0.0/21 dev eth0 proto kernel scope link src 172.17.0.14
192.168.10.2 via 172.17.0.1 dev eth0 src 172.17.0.15
192.168.11.2 via 172.17.0.1 dev eth0 src 172.17.0.16
Также вы можете проверить фактические маршруты для конкретного пункта назначения с помощью ip route get
команда:
l1:~# ip route get 192.168.10.2
192.168.10.2 via 172.17.0.1 dev eth0 src 172.17.0.15 uid 0
cache
Есть краткая версия этой же команды:
l1:~# ip r g 192.168.11.2
192.168.11.2 via 172.17.0.1 dev eth0 src 172.17.0.16 uid 0
cache
Проверьте результаты с помощью ping
и tcpdump
. Пропингуйте хосты и проверьте вывод tcpdump в другой консоли. Вы можете использовать wirehark вместо tcpdump .:
l1:~# tcpdump -ni eth0 'icmp'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
10:21:07.972535 IP 172.17.0.14 > 172.17.0.1: ICMP echo request, id 23048, seq 0, length 64
10:21:07.974416 IP 172.17.0.1 > 172.17.0.14: ICMP echo reply, id 23048, seq 0, length 64
10:21:15.391709 IP 172.17.0.15 > 192.168.10.2: ICMP echo request, id 23304, seq 0, length 64
10:21:15.393515 IP 192.168.10.2 > 172.17.0.15: ICMP echo reply, id 23304, seq 0, length 64
10:21:18.207461 IP 172.17.0.16 > 192.168.11.2: ICMP echo request, id 23560, seq 0, length 64
10:21:18.209391 IP 192.168.11.2 > 172.17.0.16: ICMP echo reply, id 23560, seq 0, length 64
SNAT
цель в iptables. Но если у вас есть сотни похожих правил, это может повлиять на производительность.l1:~# iptables -t nat -A POSTROUTING \
-o eth0 --dst 192.168.10.2 \
-j SNAT --to-source 172.17.0.15
l1:~# iptables -t nat -A POSTROUTING \
-o eth0 --dst 192.168.11.2 \
-j SNAT --to-source 172.17.0.16
Лучше используйте iptables-save
и iptables-apply
для безопасной настройки iptables. Проверка такая же, как и в случае с маршрутом - с ping
и tcpdump
. Кроме того, вы можете проверить счетчики правил, чтобы убедиться, что эти правила работают.
l1:~# iptables-save -c -t nat
# Generated by iptables-save v1.6.2 on Wed May 15 10:31:26 2019
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [4:336]
:POSTROUTING ACCEPT [0:0]
[2:168] -A POSTROUTING -d 192.168.10.2/32 -o eth0 -j SNAT --to-source 172.17.0.15
[2:168] -A POSTROUTING -d 192.168.11.2/32 -o eth0 -j SNAT --to-source 172.17.0.16
COMMIT
# Completed on Wed May 15 10:31:26 2019
ping
это -I
вариант:l1:~# ping -c 2 -I 172.17.0.15 192.168.11.2
PING 192.168.11.2 (192.168.11.2) from 172.17.0.15: 56 data bytes
64 bytes from 192.168.11.2: seq=0 ttl=63 time=2.348 ms
64 bytes from 192.168.11.2: seq=1 ttl=63 time=1.270 ms
--- 192.168.11.2 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 1.270/1.809/2.348 ms
l1:~# tcpdump -ni eth0 'icmp'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
10:37:08.724723 IP 172.17.0.15 > 192.168.11.2: ICMP echo request, id 37384, seq 0, length 64
10:37:08.726805 IP 192.168.11.2 > 172.17.0.15: ICMP echo reply, id 37384, seq 0, length 64
10:37:09.724985 IP 172.17.0.15 > 192.168.11.2: ICMP echo request, id 37384, seq 1, length 64
10:37:09.726084 IP 192.168.11.2 > 172.17.0.15: ICMP echo reply, id 37384, seq 1, length 64
ip route
или iptables
ничего не знает о доменных именах и может использовать только IP-адрес назначения. Iptables может разрешать доменное имя при создании правила, но IP-адрес в нем не будет обновляться волшебным образом. Есть несколько приемов, чтобы избежать этого ограничения: /etc/hosts
файл, чтобы сделать это. Этот способ подходит для быстрых тестов и записей DNS с длинным TTL.dnsmasq
, ipset
и iptables
. В таком случае dnsmasq
разрешает доменные имена и сохраняет свои IP-адреса в ipset
списки. Вы можете использовать эти списки в iptables
SNAT
правила.