Score:0

วิธีจัดการกับคำขอ DNS เมื่อใช้การเชื่อมต่อ OpenVPN หลายรายการและเส้นทางตามนโยบาย

ธง de

ฉันมี 2 เครือข่ายย่อยในเครือข่ายท้องถิ่นของฉัน (192.168.4.0/24, 192.168.5.0/24) แต่มีเพียง 1 เซิร์ฟเวอร์เกตเวย์ (192.168.4.223) ซึ่งมี 2 การเชื่อมต่อ OpenVPN (10.100.2.6/24, 10.100.3.6/24) . โทโพโลยีมีลักษณะดังนี้: ป้อนคำอธิบายรูปภาพที่นี่

ฉันต้องการให้คอมพิวเตอร์ใน 192.168.4.0/24 (เช่น คอมพิวเตอร์ B) เชื่อมต่ออินเทอร์เน็ตผ่านเซิร์ฟเวอร์ OpenVPN 2 และคอมพิวเตอร์ใน 192.168.5.0/24 (เช่น คอมพิวเตอร์ A) เพื่อเชื่อมต่ออินเทอร์เน็ตผ่านเซิร์ฟเวอร์ OpenVPN 1

บน โอเพนเวิร์ต เราเตอร์:

## ฉันทำอะไรลงไป:
vi /etc/iproute2/rt_tables 
...
110 myovp # เพิ่มตารางสำหรับ 192.168.5.0/24
...
# จากนั้นเพิ่มกฎสำหรับ iproute2 และ iptables:
กฎ ip เพิ่ม fwmark 110 ตาราง 110
กฎ ip เพิ่มไปยัง 192.168.4.0/24 ตารางหลัก
เส้นทาง ip เพิ่มค่าเริ่มต้นผ่าน 192.168.4.223 dev br-lan_1 ตาราง 110
iptables -t mangle -A PREROUTING -i br-lan_2 -j MARK --set-mark 110

## ผลลัพธ์บางส่วน:
# ผลลัพธ์ของ `ip rule`:
0: จากการค้นหาทั้งหมดในท้องถิ่น
32764: จากทั้งหมดเป็น 192.168.4.0/24 ค้นหาหลัก
32765: จาก fwmark 0x6e ค้นหา myovp ทั้งหมด
32766: จากหลักการค้นหาทั้งหมด
32767: จากค่าเริ่มต้นการค้นหาทั้งหมด
# ผลลัพธ์ของ `การแสดงเส้นทาง ip`:
192.168.4.0/24 dev br-lan_1 ลิงก์ขอบเขตเคอร์เนลโปรโต src 192.168.4.1
192.168.5.0/24 dev br-lan_2 ลิงก์ขอบเขตเคอร์เนลโปรโต src 192.168.5.1
# ผลลัพธ์ของ `ตารางแสดงเส้นทาง ip 110`:
เริ่มต้นผ่าน 192.168.4.223 dev br-lan_1
# ผลลัพธ์ของ `iptables -t mangle -L PREROUTING -v`
CHAIN ​​PREROUTING (นโยบายยอมรับแพ็กเก็ต 871K, 177M ไบต์)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง
28030 1954K MARK ทั้งหมด -- br-lan_2 ทุกที่ ทุกแห่ง MARK ตั้ง 0x6e

บน เซิร์ฟเวอร์เกตเวย์เดเบียน:

## ฉันทำอะไรลงไป:
vi /etc/iproute2/rt_tables 
...
110 myovp # เพิ่มตารางสำหรับ 192.168.5.0/24
...
# จากนั้นเพิ่มกฎสำหรับ iproute2 และ iptables:
กฎ ip เพิ่ม fwmark 110 ตาราง 110
กฎ ip เพิ่มไปยัง 192.168.4.0/24 ตารางหลัก
กฎ ip เพิ่มไปยัง 192.168.5.0/24 ตารางหลัก
เส้นทาง ip เพิ่มค่าเริ่มต้นผ่าน 10.100.2.1 dev tun0 ตาราง 110
เส้นทาง ip เพิ่ม 192.168.5.0/24 ผ่าน 192.168.4.1 dev enp4s0
iptables -t mangle -A PREROUTING -i enp4s0 -s 192.168.5.0/24 -j MARK --set-mark 110
# จากนั้นเพิ่มกฎสำหรับ NAT และ FORWARD:
iptables -A ไปข้างหน้า -i enp4s0 -j ​​ยอมรับ
iptables -A FORWARD -i tun1 -o enp4s0 -m state --state RELATED,ESTABLISHED -j ยอมรับ
iptables -A FORWARD -i enp4s0 -o tun1 -m state --state RELATED,ESTABLISHED -j ยอมรับ
iptables -A FORWARD -i tun0 -o enp4s0 -m state --state RELATED,ESTABLISHED -j ยอมรับ
iptables -A FORWARD -i enp4s0 -o tun0 -m state --state RELATED,ESTABLISHED -j ยอมรับ
iptables -A OUTPUT -o tun1 -j ยอมรับ
iptables -A OUTPUT -o tun0 -j ยอมรับ
iptables -t nat -A โพสต์ -s 192.168.4.0/24 -o tun1 -j MASQUERADE
iptables -t nat -A โพสต์ -s 192.168.5.0/24 -o tun0 -j MASQUERADE

## ผลลัพธ์บางส่วน:
# ผลลัพธ์ของ `ip addr`:
...
4: tun1: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN กลุ่มเริ่มต้น qlen 500
    ลิงค์/ไม่มี
    inet 10.100.3.6/24 ขอบเขต global tun1
       valid_lft ตลอดไป reserved_lft ตลอดไป
    inet6 fe80::fd55:444a:552a:a454/64 ลิงค์ขอบเขตความเสถียร - ความเป็นส่วนตัว
       valid_lft ตลอดไป reserved_lft ตลอดไป
5: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN กลุ่มเริ่มต้น qlen 500
    ลิงค์/ไม่มี
    inet 10.100.2.6/24 ขอบเขต global tun0
       valid_lft ตลอดไป reserved_lft ตลอดไป
    inet6 fe80::af61:acf1:4e9c:b1a8/64 ลิงค์ขอบเขตความเสถียร - ความเป็นส่วนตัว
       valid_lft ตลอดไป reserved_lft ตลอดไป
...
# ผลลัพธ์ของ `การแสดงเส้นทาง ip`:
0.0.0.0/1 ผ่าน 10.100.3.1 dev tun1
ค่าเริ่มต้นผ่าน 192.168.4.1 dev enp4s0 proto static metric 100
10.100.2.0/24 dev tun0 ลิงก์ขอบเขตเคอร์เนลโปรโต src 10.100.2.5
10.100.3.0/24 dev tun1 โปรโตเคอร์เนลขอบเขตลิงก์ src 10.100.3.5
128.0.0.0/1 ผ่าน 10.100.3.1 dev tun1
192.168.4.0/24 dev enp4s0 ลิงก์ขอบเขตเคอร์เนลโปรโต src 192.168.4.223 เมตริก 100
192.168.5.0/24 ผ่าน 192.168.4.1 dev enp4s0
# ผลลัพธ์ของ `ตารางแสดงเส้นทาง ip 110`:
ค่าเริ่มต้นผ่าน 10.100.2.1 dev tun0
# ผลลัพธ์ของ `ip rule`:
0: จากการค้นหาทั้งหมดในท้องถิ่น
32763: จากทั้งหมดถึง 192.168.5.0/24 ค้นหาหลัก
32764: จากทั้งหมดเป็น 192.168.4.0/24 ค้นหาหลัก
32765: จากการค้นหา fwmark 0x6e ทั้งหมด 110
32766: จากหลักการค้นหาทั้งหมด
32767: จากค่าเริ่มต้นการค้นหาทั้งหมด
# ผลลัพธ์ของ `iptables -t filter -L -v`:
Chain INPUT (นโยบายยอมรับแพ็กเก็ต 30661, 3126K ไบต์)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง
เชน FORWARD (นโยบายยอมรับ 0 แพ็กเก็ต 0 ไบต์)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง
2117K 194M ยอมรับทั้งหมด -- enp4s0 ทุกที่ทุกที่
3394K 4191M ยอมรับทั้งหมด -- tun1 enp4s0 ทุกที่ ทุกรัฐ ที่เกี่ยวข้อง ก่อตั้ง
    0 0 ยอมรับทั้งหมด -- enp4s0 tun1 ทุกที่ ทุกรัฐ ที่เกี่ยวข้อง ก่อตั้ง
 1541 133K ยอมรับทั้งหมด -- tun0 enp4s0 ทุกที่ ทุกรัฐ ที่เกี่ยวข้อง ก่อตั้ง
    0 0 ยอมรับทั้งหมด -- enp4s0 tun0 ทุกที่ ทุกรัฐ ที่เกี่ยวข้อง ก่อตั้ง
Chain OUTPUT (นโยบายยอมรับแพ็กเก็ต 35596, 22M ไบต์)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง
 1044 108K ยอมรับทั้งหมด -- tun1 ใดก็ได้ทุกที่
    0 0 ยอมรับทั้งหมด -- tun0 ใดก็ได้ทุกที่
# ผลลัพธ์ของ `iptables -t nat -L -v`:
CHAIN ​​PREROUTING (นโยบายยอมรับแพ็กเก็ต 208K, 34M ไบต์)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง
Chain INPUT (นโยบายยอมรับ 266 แพ็คเก็ต, 46150 ไบต์)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง
Chain POSTROUTING (นโยบายยอมรับ 98 แพ็กเก็ต, 5876 ไบต์)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง
27638 2036K MASQUERADE ทั้งหมด -- ใด ๆ tun1 192.168.4.0/24 ทุกที่
  347 19186 MASQUERADE ทั้งหมด -- ใดๆ tun0 192.168.5.0/24 ทุกที่
Chain OUTPUT (นโยบายยอมรับ 95 แพ็คเก็ต, 5636 ไบต์)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง
# ผลลัพธ์ของ `iptables -t mangle -L PREROUTING -v`:
CHAIN ​​PREROUTING (นโยบายยอมรับ 0 แพ็คเก็ต, 0 ไบต์)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง
 2829 215K MARK ทั้งหมด -- enp4s0 ใด ๆ 192.168.5.0/24 ทุกที่ MARK ตั้งค่า 0x6e

และบนเซิร์ฟเวอร์ OpenVPN ทั้งสอง (เกือบจะเหมือนกันยกเว้นที่อยู่ IP ของซับเน็ตและที่อยู่อินเทอร์เน็ต):

## ฉันทำอะไรลงไป:
# ตั้งค่าเซิร์ฟเวอร์ OpenVPN ก่อน
# จากนั้นเพิ่มกฎสำหรับ NAT และ FORWARD:
iptables -A ไปข้างหน้า -i tun0 -j ยอมรับ
iptables -A FORWARD -i tun0 -o eth0 -m state --state RELATED,ESTABLISHED -j ยอมรับ
iptables -A FORWARD -i eth0 -o tun0 -m state --state RELATED,ESTABLISHED -j ยอมรับ
iptables -A OUTPUT -o tun0 -j ยอมรับ
iptables -t nat -A POSTROUTING -s 10.100.2.0/24 -o eth0 -j MASQUERADE

## ผลผลิตบางส่วน
# ผลลัพธ์ของ `ip addr`:
...
5: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN กลุ่มเริ่มต้น qlen 500
    ลิงค์/ไม่มี
    inet 10.100.2.1/24 ขอบเขต global tun0
       valid_lft ตลอดไป reserved_lft ตลอดไป
    inet6 fe80::c31e:ba42:4cb5:d887/64 ลิงค์ขอบเขตความเสถียร - ความเป็นส่วนตัว
       valid_lft ตลอดไป reserved_lft ตลอดไป
...
# ผลลัพธ์ของ `iptables -t filter -L -v`:
Chain INPUT (นโยบายยอมรับแพ็กเก็ต 16M, 1026M ไบต์)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง
ส่งต่อไปข้างหน้า (นโยบายยอมรับแพ็กเก็ต 1522K, 114M ไบต์)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง
 247M 192G ยอมรับทั้งหมด - จูน 0 ได้ทุกที่ทุกที่
    0 0 ยอมรับทั้งหมด -- tun0 eth0 ทุกที่ ทุกรัฐที่เกี่ยวข้อง จัดตั้งขึ้น
 178M 106G ยอมรับทั้งหมด -- eth0 tun0 ทุกที่ ทุกรัฐ ที่เกี่ยวข้อง ก่อตั้ง
    0 0 ยอมรับทั้งหมด -- tun0 ใด ๆ 10.100.2.0/24 ทุกที่
Chain OUTPUT (นโยบายยอมรับแพ็กเก็ต 16M, 1047M ไบต์)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง
55959 7717K ยอมรับทั้งหมด -- tun0 ใดก็ได้ทุกที่
# ผลลัพธ์ของ `iptables -t nat -L -v`:
เชน PREROUTING (นโยบายยอมรับแพ็กเก็ต 27M, 1809M ไบต์)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง
 Chain INPUT (นโยบายยอมรับแพ็กเก็ต 11M, 605M ไบต์)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง
Chain OUTPUT (นโยบายยอมรับแพ็กเก็ต 5047, 386K ไบต์)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง
Chain POSTROUTING (นโยบายยอมรับแพ็กเก็ต 996K, 83M ไบต์)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง
  16M 1063M MASQUERADE ทั้งหมด -- ใดๆ eth0 10.100.2.0/24 ทุกที่

ตอนนี้ คอมพิวเตอร์ใน 192.168.4.0/24 (เช่น คอมพิวเตอร์ B) สามารถเชื่อมต่ออินเทอร์เน็ตผ่านเซิร์ฟเวอร์ OpenVPN 2 ได้แล้ว

แต่ใน 192.168.5.0/24 คอมพิวเตอร์ไม่สามารถแก้ไขชื่อโฮสต์ใดๆบนคอมพิวเตอร์ A, ปิง 8.8.8.8 ทำงานได้ดีและ ติดตาม 8.8.8.8 แสดงว่าสามารถเข้าเซิร์ฟเวอร์ 8.8.8.8 ผ่าน OpenVPN เซิร์ฟเวอร์ 1 ได้ แต่ nslookup google.com 8.8.8.8 ผลตอบแทน ข้อความค้นหาถูกปฏิเสธ.

ขอโทษจริง ๆ สำหรับการโพสต์ที่ยาวเช่นนี้ แต่ฉันไม่รู้จริง ๆ ว่าต้องทำอะไรหรือพลาดอะไรไป ฉันไม่ใช่ผู้เชี่ยวชาญเรื่องเครือข่าย ดังนั้นข้อเสนอแนะและความช่วยเหลือใด ๆ ที่เจาะจงจึงได้รับการชื่นชม ขอบคุณ!

Score:0
ธง de

แก้ไขปัญหา.

เพิ่มกฎสองข้อใน iptables บน โอเพนเวิร์ต โดยค่าเริ่มต้นด้วยเหตุผลบางอย่างที่อธิบายไม่ได้:

iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 53
iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 53

ไม่รู้จริง ๆ ว่าทำไมคนที่ขายเราเตอร์ให้ฉันเพิ่มพวกเขา :(

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา