Portál AbcLinuxu, 12. května 2025 10:32
man iptables You can add several --to-source options. If you specify more than one source address, either via an address range or multiple --to-source options, a simple round-robin (one after another in cycle) takes place between these adresses.Nepůjde nějak využít
ip rule nat
? A nebo pak budete muset i v iptables
udělat pravidla dle jednotlivých klientů.
ip rule nat
nic nevím, to něco takového také existuje?iptables
to půjde, pouze se mi nechce udržovat dvě tabulky zdrojových ip adres, jednu pro ip rule
a druhou pro iptables
.ip route nat
jdu to nastudovat :)
ip route nat
není podporováno v jádrech 2.6. Myšleno bylo opravdu ip rule nat
, správně tedy spíš ip rule add from nat
s příslušnými parametry mezi man ip
Fast NAT potřebuje oboje. Jednak 'ip route add ... nat ...
' pro přepis cílové adresy, jednak 'ip rule add ... nat ...
' pro přepis zdrojové adresy. Příklad použití viz např. má oblíbená FAQ. V tomto případě je ale Fast NAT k ničemu (i kdyby fungoval), to spíš další z evergreenů.
iptables NAT
. Jednodušší možnost je vnitřní síť rozdělit virtuálně na dvě (např. 192.168.1.0/25 a 192.168.1.128/25). Pokud to z nějakého důvodu nemůžete udělat, bude asi nejsnazší řešení udělat si seznam IP adres a do pravidel routování i iptables je vkládat nějakým skriptem.
Myslel jsem ještě na jednu možnost – zkusit pravidla NATu přiřadit podle labelu (alias) síťového rozhraní.
iptables -A FORWARD -o 'eth0:1' -j ACCEPTVýsledek:
Warning: wierd character in interface `eth0:1' (No aliases, :, ! or *).Je hezké, že i
iptables
používá termín alias (z ifconfig
) místo label (který používá iproute2
)…
Pokud použijete target MASQUERADE
, mělo by to fungovat - aspoň dokumentace netfilteru se tváří, že se použije stejná adresa, jaká by se použila, pokud by počítač ten paket posílal sám.
Ta druhá věc je nesmysl. Zapamatujte si důležité pravidlo: "Počínaje jádrem 2.2 žádný IP aliasing ani žádný virtuální interface eth0:0
neexistuje. Máte pouze síťové rozhraní (např.) eth0
a tomu můžete přiřadit 0 a více IPv4 adres, 0 a více IPv6 adres atd.". Ten label je pouze poznámka u příslušné IP adresy. Poznámka, která je nepovinná, nemá na zpracování paketů absolutně žádný vliv a jediný její smysl je v tom, že umožňuje příkazu ifconfig
předstírat aspoň částečně funkčnost pro ty, kdo stále ještě nezaregistrovali, že už ho více než sedm a půl roku nemají používat. Je proto nesmysl snažit se podle ní něco filtrovat v netfilteru.
label
pro jádro znamená. Původně jsem si myslel, že přeci jen k něčemu použitelný je iptables
v té chybové hlášce píše o alias
, místo aby napsaly, že musí být použito jméno rozhraní a ne žádný label
. Protože pak ta hláška dává smysl pro ty, co používají ifconfig
, ale pro uživatele iproute2
už tak jasná není – i když je nejspíš stále brzo na to, aby někdo znal iproute2
a neznal ifconfig
a nevěděl, co je to alias Protože pak ta hláška dává smysl pro ty, co používajíifconfig
, ale pro uživateleiproute2
už tak jasná není – i když je nejspíš stále brzo na to, aby někdo znaliproute2
a neznalifconfig
a nevěděl, co je to alias :-)
Nebo autor usoudil, že by takového člověka vůbec nenapadlo eth0:0
jako argument podmínky -o
použít, takže se ho ta hláška netýká. :-)
label
přece nebude jen na ozdobu. A manuálovou stránku jsem četl odzadu, a ono je to napsáno u toho label
u hned na začátku, že to vlastně k ničemu není nat - j MASQUERADE
a jádro zajistí správné odchozí IP adresy datových toků směrovaných např. přes ip rule
díky všem
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.