ฉันมี 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
ผลตอบแทน ข้อความค้นหาถูกปฏิเสธ
.
ขอโทษจริง ๆ สำหรับการโพสต์ที่ยาวเช่นนี้ แต่ฉันไม่รู้จริง ๆ ว่าต้องทำอะไรหรือพลาดอะไรไป ฉันไม่ใช่ผู้เชี่ยวชาญเรื่องเครือข่าย ดังนั้นข้อเสนอแนะและความช่วยเหลือใด ๆ ที่เจาะจงจึงได้รับการชื่นชม ขอบคุณ!