ఒకే హోస్ట్లోని రెండు వర్చువల్ మెషీన్లు వంతెన ద్వారా LAN చేరుతాయి, కానీ ip forward గొలుసులో పెట్టిన నియమం ఎప్పుడూ కదలని కౌంటర్ను చూపుతుంది. ఫ్రేమ్లు నిజమైనవి, ట్రాఫిక్ వెళ్తోంది, మరియు నియమం దాని మార్గంలో లేదు. Linux వంతెన ట్రాఫిక్ను బయటపెట్టే రెండు మార్గాలను పోల్చడం ఈ నిశ్శబ్దాన్ని వివరిస్తుంది, మరియు ఒక పాత మాడ్యూల్ లోడ్ చేయడం కనిపించే దానికంటే ఎందుకు చెడు సమాధానమో కూడా వివరిస్తుంది.

ఒక హోస్ట్ ద్వారా రెండు మార్గాలు

ప్యాకెట్ ఈ హోస్ట్ను రెండు చాలా భిన్నమైన మార్గాల్లో విడిచిపెట్టగలదు, ఆ భేదం ఏ హుక్లు దాన్ని చూస్తాయో నిర్ణయిస్తుంది. గమ్యం ఒక భౌతిక పోర్ట్కు ఆవల ఉండి, ఫ్రేమ్ వంతెనలోని రెండు పోర్టుల మధ్య స్విచ్ అయితే, హోస్ట్ ఒక Ethernet ఫ్రేమ్ను పంపుతుంది; రూటింగ్ కోడ్ అడగబడదు, మరియు రూట్ చేయబడిన హాప్ ఏదీ జరగదు. గమ్యం హోస్ట్ తానే లేదా టన్నెల్ ఇంటర్ఫేస్ ద్వారా చేరే నెట్వర్క్ అయితే, ప్యాకెట్ రూట్ చేయబడుతుంది మరియు IP పొర హుక్లు నిజంగా వర్తిస్తాయి. ఈ చీలికను గుర్తుంచుకోండి, ఎందుకంటే గొలుసులు మరియు కుటుంబాల గురించి ప్రతి తదుపరి ప్రశ్న ఫ్రేమ్ రెండు మార్గాల్లో ఏది తీసుకుంటుంది అనే దాని నుండి వస్తుంది.

ఆ భేదమే ఏదీ లెక్కించని నియమం వెనుక ఉన్న మొత్తం కథ. veth9a1 నుండి enp3s0 వరకు వంతెన చేయబడిన ఫ్రేమ్ IP స్టాక్ను కాదు, వంతెనను దాటుతుంది, కాబట్టి ip forward గొలుసుకు సరిపోల్చడానికి ఏమీ కనిపించదు. పాత ఉదాహరణలోని ఇంటర్ఫేస్ పేర్లు మీకు ఏ మార్గం ఉందో నిర్ణయించవు, అందుకే మొదటి అడుగు నియమాల సముదాయాన్ని కాదు, టోపాలజీని చూడటం.

టన్నెల్ పేరు పెట్టదగిన మూడో సందర్భాన్ని జోడిస్తుంది. TUN పరికరం IP ప్యాకెట్లను హోస్టుకు అందిస్తుంది, కాబట్టి అవి రూట్ చేయబడి నిజంగా IP గొలుసుల గుండా వెళ్తాయి, అయితే వంతెనకు కలిపిన TAP పరికరం ఫ్రేమ్లను అందించి వంతెన సందర్భంలా ప్రవర్తిస్తుంది. పరికర రకమే నిర్ణయిస్తుంది, ఉత్పత్తి పేరు కాదు.

వంతెన చేయబడిన ఫ్రేమ్ను చూడగల రెండు కుటుంబాలను పోల్చండి

Linux nftables యొక్క bridge కుటుంబం ద్వారా స్థానిక వంతెన వడపోతకు మద్దతు ఇస్తుంది, ఎగురుతున్న ఫ్రేమ్లను పరిశీలించి పడవేయడానికి దానికి ఏ పాత మాడ్యూల్ అవసరం లేదు. కెర్నల్ సొంత వంతెన పత్రాలు ఈ సిఫారసును నేరుగా ఇస్తాయి, శోధన ఫలితం మాడ్యూల్ లోడ్ చేయమని చెప్పే ముందు ఇది తెలుసుకోవడం ఉపయోగకరం.

Observation pointWhat it seesWhat it costs
nftables bridge family chainsEthernet frames forwarded between bridge ports, in both directionsRules must be written in bridge syntax with link-layer matches
Legacy br_netfilter plus an ip chainBridged IPv4 and IPv6 packets, re-exposed through IP-layer hooksExisting host rules may begin matching traffic they never saw before
inet chain for routed trafficPackets the host routes, including traffic arriving from a TUN deviceNo visibility into purely switched frames

iptables కు బదులు nft ఆదేశాన్ని ఉపయోగించడం నియమాన్ని సరైన కుటుంబంలో దానంతట అదే ఉంచదు. bridge కుటుంబంలో ప్రకటించిన గొలుసు ఫ్రేమ్లను చూస్తుంది; ip, ip6 లేదా inet లో ప్రకటించిన గొలుసు వాటిని చూడదు, ఏ బైనరీ దాన్ని సృష్టించినా. కుటుంబం గొలుసు యొక్క లక్షణం, దాన్ని టైప్ చేసిన సాధనం యొక్క లక్షణం కాదు.

పాత మార్గం వేరుగా పనిచేస్తుంది, అందుకే అలవాటుతో ఒక వైపు ఎంచుకోవడం కంటే పోల్చడం మంచిది. br_netfilter లోడ్ చేసి bridge-nf-call సెట్టింగ్లను ప్రారంభిస్తే, వంతెన చేయబడిన IPv4 మరియు IPv6 ట్రాఫిక్ మళ్లీ IP పొర హుక్ల ద్వారా బయటపడుతుంది, కాబట్టి సాధారణ iptables నియమం చివరకు దానితో సరిపోలగలదు. ఫ్రేమ్లు మారవు; అవి దాటే హుక్ల సమితి మారుతుంది, అంటే ఇప్పటికే ఉన్న ప్రతి హోస్ట్ నియమానికి ఇప్పుడు కొత్త ప్రేక్షకులు ఉన్నారు.

నియమం జోడించే ముందు వాస్తవ మార్గాన్ని చదవండి

మూడు ఆదేశాలు మీరు ఎక్కడ ఉన్నారో నిర్ణయిస్తాయి: వంతెన ఏదానికి కలిపి ఉంది, పాత మాడ్యూల్ చురుకుగా ఉందా, మరియు bridge కుటుంబంలో ఇప్పటికే ఏ గొలుసులు ఉన్నాయి. ఏదైనా రాసే ముందు వాటిని నడపండి, ఎందుకంటే సమాధానం రెండు డిజైన్లలో ఏది విస్తరిస్తున్నారో నిర్ణయిస్తుంది. ఈ అడుగును దాటవేయడమే సరైన నియమం ఏదీ దాటని గొలుసులో పడే విధానం.

bridge link show
lsmod | grep br_netfilter
nft list ruleset | grep -A4 "chain forward"

అవుట్పుట్ సందర్భాలను శుభ్రంగా వేరు చేస్తుంది. వంతెన కింద జాబితా చేసిన పోర్టులు ఏ ఇంటర్ఫేస్లు స్విచ్ అవుతున్నాయో చెబుతాయి; ఖాళీ lsmod ఫలితం అంటే వంతెన ఫ్రేమ్ల IP పొరలో ఎలాంటి దృశ్యమానత లేదు; bridge కుటుంబం యొక్క ఇప్పటికే ఉన్న forward గొలుసు అంటే విధానం యజమాని ఇప్పటికే ఉన్నారు మరియు మీ నియమం సొంత కొత్త గొలుసులో కాదు, అక్కడికే చేరుతుంది.

తర్వాత తిరిగి చదవడానికి సులభమైన ఒక నియమాన్ని జోడించండి, కౌంటర్తో, తీర్పును మార్చకుండా, మరియు ఒక ప్రతినిధి ప్రవాహాన్ని వంతెన గుండా పంపండి. కదిలే కౌంటర్ ఫ్రేమ్ నియమాన్ని చేరుకున్నట్లు నిరూపిస్తుంది. అంతే అది నిరూపిస్తుంది, కాబట్టి తిరస్కరించబడిన మార్గంతో కూడా కొనసాగండి, ఎందుకంటే అన్నింటినీ అంగీకరించే విధానం కూడా కదిలే కౌంటర్ను ఉత్పత్తి చేస్తుంది.

nft add rule bridge filter forward iifname "veth9a1" oifname "enp3s0" counter accept

పాత మాడ్యూల్ ప్రవర్తనను ఎక్కడ మారుస్తుంది

నడుస్తున్న వంతెనపై పాత మార్గాన్ని ప్రారంభించడం దృశ్యమానత జోడించే తటస్థ చర్య కాదు. మునుపు వంతెన ట్రాఫిక్కు అందని నియమాలు అందుబాటులోకి వస్తాయి, మరో ఇంటర్ఫేస్ కోసం రాసిన హోస్ట్ నియమాలు కూడా, మరియు ip forward గొలుసులోని అప్రమేయ drop విధానం మునుపు తాకకుండా వెళ్లిన ఫ్రేమ్లకు అకస్మాత్తుగా వర్తించవచ్చు. ఆ వంతెన ద్వారా నిర్వహించబడే హోస్ట్లో ఫలితం కన్సోల్ లేని లాకౌట్. ఇది ఊహాత్మక వైఫల్య విధానం కాదు; మీరు ఇప్పుడే విస్తరించిన మార్గం ద్వారా చేరే మెషీన్లో హుక్ల సమితిని విస్తరించడం యొక్క సాధారణ పరిణామం.

మరింత సురక్షిత క్రమం ఏ కుటుంబం విధానాన్ని కలిగి ఉందో నిర్ణయించడం, నియమాలను అక్కడే రాయడం, మరియు ఏ sysctl ను మార్చే ముందు స్వతంత్ర పునరుద్ధరణ మార్గాన్ని ఉంచడం. రెండు కుటుంబాలూ నియమాలు కలిగి ఉంటే, ఏది అధికారం కలిగినదో నమోదు చేయండి; ఒకదానిపై ఒకటి అతివ్యాప్తి చెందే రెండు విధానాలే చదవడానికి ఒక్క ఫైలు కూడా లేకుండా ప్యాకెట్ ఒక చోట అంగీకరించబడి మరో చోట తిరస్కరించబడే విధానం.

వేరుచేయడానికే ఇంకా పూర్తి డిజైన్ అవసరం. ఒక మూలాన్ని ఒక గమ్యానికి అనుమతించడం ఒక ప్రవాహం పనిచేస్తుందని మాత్రమే నిరూపిస్తుంది, అయితే అవసరం సాధారణంగా ఒక VM తన పొరుగువారిని లేదా హోస్ట్ను చేరుకోలేకపోవడం. తిరస్కార నియమాలపై ఉన్న కౌంటర్లు అంగీకార నియమంపై ఉన్న కౌంటర్ కంటే ముఖ్యమైనవి, ఎందుకంటే అంగీకార కౌంటర్ కదులుతుందని మీరు ఇప్పటికే ఆశించినది.

చివరగా, హోస్ట్ ఇన్పుట్ సందర్భాన్ని విడిగా ఉంచండి. వంతెన సొంత IP కు చిరునామా చేయబడిన ట్రాఫిక్ forward కు కాదు, input కు వస్తుంది, forward లోని నియమం మీరు ఏ కుటుంబాన్ని ఎంచుకున్నా దాన్ని ఎప్పటికీ చూడదు. మూడు సందర్భాలు, రెండు కుటుంబాలు, ఒక పాఠం: మార్గం హుక్ను నిర్ణయిస్తుంది, హుక్ మీ నియమం ఉనికిలో ఉందా లేదా అని నిర్ణయిస్తుంది.

సంబంధిత వ్యాసాలు