シェルで次のように、すでに異なる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のように記述されていることは知っています。
IPあたりの速度調整は10Mbpsに設定されており(またはMac Addr、まだわかりません)、意図的なプロジェクトのためにバイパスを検討しています。
私が今欲しいのは、ルーターの速度調整を研究するために、各IPエイリアスに特定の宛先を設定することです。これで、IP /接続ごとに10Mbpsになるはずです。
ルーター: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
「-oeth0」は正しいですか?それとも「-oeth0.1」と書くべきですか?
私は多くの同様のコマンドを試しましたが成功しませんでした。少なくとも、接続ごとに10Mbpsではなく、すべての接続に10Mbpsを使用し続けました(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
で結果を確認します。ホストにpingを実行し、他のコンソールでtcpdumpの出力を確認します。 tcpdumpの代わりにwiresharkを使用できます。
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
ターゲットを使用することです。ただし、同様のルールが何百もある場合は、パフォーマンスに影響を与える可能性があります。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
ファイルを使用してそれを行うことができます。この方法は、TTLが長いクイックテストやDNSレコードに適しています。dnsmasq
、ipset
、およびiptables
の使用。この場合、dnsmasq
はドメイン名を解決し、そのIPアドレスをipset
リストに保存します。これらのリストは、iptables
SNAT
ルールで使用できます。