ฉันรู้ว่าคำถามนี้เคยถูกถามในอดีต แต่คำตอบที่ฉันยังไม่พบนั้นไม่ได้มีประโยชน์ทั้งหมดในกรณีการใช้งานเฉพาะกลุ่มนี้
ขณะนี้ฉันมีเราเตอร์หนึ่งตัวที่ใช้ DD-WRT บน 192.168.0.1 หนึ่งเราเตอร์เชื่อมต่อกับก่อนหน้านี้ด้วย IP 192.168.0.2 ซึ่งทำงานเป็นไคลเอนต์ VPN และ Raspberry Pi หนึ่งตัวตั้งค่าให้เรียกใช้ https://pi-hole.net DNS กรองบน 192.168.0.21
ท้ายที่สุดแล้ว เป้าหมายของฉันที่นี่คือบล็อกคำขอ DNS ทั้งหมดบนเครือข่ายของฉันจากอุปกรณ์ใด ๆ ไปยังเซิร์ฟเวอร์ DNS ใด ๆ ยกเว้นเราเตอร์ตัวที่สองและ Pihole ของฉัน และอนุญาตให้อุปกรณ์ทั้งสองนั้นสร้างคำขอ DNS ได้
บนเราเตอร์ของฉัน กฎไฟร์วอลล์ (iptables) ปัจจุบันของฉันมีดังนี้:
##### รักษาเครือข่ายบน pi-hole
iptables --table nat --insert PREROUTING --in-interface br0 --protocol tcp --source ! 192.168.0.2,192.168.0.21 -- พอร์ตปลายทาง 53 -- กระโดด DNAT -- ไปยังปลายทาง 192.168.0.21:53
iptables --table nat --insert PREROUTING --in-interface br0 --protocol udp --source ! 192.168.0.2,192.168.0.21 -- พอร์ตปลายทาง 53 -- กระโดด DNAT -- ไปยังปลายทาง 192.168.0.21:53
##### เจาะรู DNS สำหรับ pi-hole
iptables --table nat --insert PREROUTING --in-interface br0 --protocol tcp --source 192.168.0.2,192.168.0.21 --destination-port 53 --jump ACCEPT
iptables --table nat --insert PREROUTING --in-interface br0 --protocol udp --source 192.168.0.2,192.168.0.21 --destination-port 53 --jump ACCEPT
ตอนนี้ฉันเพิ่งคิดว่าทั้งหมดนี้ทำงานได้ดีและสวยงาม อย่างไรก็ตามฉันไม่เคยเข้าไปและ พยายาม เพื่อทดสอบกฎ เมื่อพยายามดำเนินการตามคำสั่ง ฉันพบว่ากฎข้อ 3 และ 4 ทำงานได้ดี อย่างไรก็ตาม กฎข้อที่ 1 และ 2 ไม่ได้:
root@ddwrt:~# iptables --table nat --insert PREROUTING --in-interface br0 --protocol tcp --source ! 192.168.0.2,192.168.0.21 --ปลายทางพอร์ต 53 --กระโดดยอมรับ
อาร์กิวเมนต์ไม่ถูกต้อง `192.168.0.2,192.168.0.21'
บาง วิจัย ทำให้ฉันคิดว่าบางที !
ควรไปก่อน --แหล่งที่มา
ดังนั้นฉันจึงลองทำดู ซึ่งอาจได้ผล ยกเว้นที่อยู่ IP ต้นทางหลายแห่งไม่ได้รับอนุญาตจาก iptables เวอร์ชันของฉัน:
root@ddwrt:~# iptables --table nat --insert PREROUTING --in-interface br0 --protocol tcp ! --source 192.168.0.2,192.168.0.21 --destination-port 53 --jump ยอมรับ
iptables v1.8.5 (เดิม): ! ไม่อนุญาตให้ใช้กับที่อยู่ IP ต้นทางหรือปลายทางหลายรายการ
มากกว่า วิจัย ทำให้ฉันลองใช้ ipset เพื่อแก้ปัญหา:
root@ddwrt:~# ipset -N piholeAndVpnPassthrough iphash
root@ddwrt:~# ipset -A piholeAndVpnPassthrough 192.168.0.2
root@ddwrt:~# ipset -A piholeAndVpnPassthrough 192.168.0.21
ส่วนนั้นไปได้สวย อย่างไรก็ตาม เนื่องจากไม่เคยใช้ ipset มาก่อน จึงไม่สามารถทำงานได้ด้วยวิธีใดก็ตามที่ฉันพยายาม:
root@ddwrt:~# iptables --table nat --insert PREROUTING --in-interface br0 --protocol tcp ! --source --match-set "piholeAndVpnPassthrough" --destination-port 53 --jump DNAT --to-destination 192.168.0.21:53
อาร์กิวเมนต์ไม่ถูกต้อง `piholeAndVpnPassthrough'
ลอง `iptables -h' หรือ 'iptables --help' สำหรับข้อมูลเพิ่มเติม
root@ddwrt:~# iptables --table nat --insert PREROUTING --in-interface br0 --protocol tcp ! --source -m set --match-set piholeAndVpnPasshthrough --destination-port 53 --jump DNAT --to-destination 192.168.0.21:53
อาร์กิวเมนต์ `set' ไม่ถูกต้อง
ลอง `iptables -h' หรือ 'iptables --help' สำหรับข้อมูลเพิ่มเติม
root@ddwrt:~# iptables --table nat --insert PREROUTING --in-interface br0 --protocol tcp -m set --match-set piholeAndVpnPassthrough ! --source --destination-port 53 --jump DNAT --to-destination 192.168.0.21:53
iptables v1.8.5 (เดิม): --match-set ต้องการสอง args
ลอง `iptables -h' หรือ 'iptables --help' สำหรับข้อมูลเพิ่มเติม
root@ddwrt:~# iptables --table nat --insert PREROUTING --in-interface br0 --protocol tcp -m set --match-set piholeAndVpnPasshthrough src ! --source --destination-port 53 --jump DNAT --to-destination 192.168.0.21:53
iptables v1.8.5 (เดิม): ไม่มีการตั้งค่า piholeAndVpnPasshthrough
ดังนั้นฉันจึงไม่รู้ว่าจะทำสิ่งนี้ให้สำเร็จได้อย่างไร เราจะใช้ที่อยู่ต้นทางที่ถูกปฏิเสธสองแห่งใน iptables ได้อย่างไร