Score:0

เซิร์ฟเวอร์ Ubuntu เป็นทั้งเราเตอร์ NAT ส่วนตัวและเราเตอร์สาธารณะ

ธง cn

ฉันกำลังพยายามทำสิ่งที่ฉันไม่เคยลองมาก่อน ฉันมี Dell PowerEdge 540 ที่ฉันติดตั้ง Ubuntu ไว้ ฉันได้ติดตั้งสาย Comcast Business และมีการกำหนดค่าเครือข่ายจริงดังต่อไปนี้:

เซิร์ฟเวอร์อูบุนตู 20.04.3 LTS

enp10s0f0: (10gb SFP+ การ์ดเสริม)
IPv4: 5*.2*.204.214
ซับเน็ต: 255.255.255.252
เกตเวย์: 5*.2*.204.213

enp10s0f1: (10gb SFP+ การ์ดเสริม)
IPv4: 5*.2*.205.1
ซับเน็ต: 255.255.255.0

eno1: (อีเธอร์เน็ตทองแดง 1gb)
IPv4: 10.0.0.0
เครือข่ายย่อย: 255.0.0.0

นี่คือผลลัพธ์ของ ไอพีแอดเดรส:

1: จริง: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN กลุ่มเริ่มต้น qlen 1,000
    ลิงค์ / ย้อนกลับ 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 ขอบเขตโฮสต์ lo
       valid_lft ตลอดไป reserved_lft ตลอดไป
    inet6 ::1/128 ขอบเขตโฮสต์
       valid_lft ตลอดไป reserved_lft ตลอดไป
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP กลุ่มเริ่มต้น qlen 1000
    ลิงค์/อีเธอร์ 00:1e:c9:b5:b2:3c brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.1/8 brd 10.255.255.255 ขอบเขต global eno1
       valid_lft ตลอดไป reserved_lft ตลอดไป
    inet6 ****::***:c9ff:feb5:b23c/64 ลิงค์ขอบเขต
       valid_lft ตลอดไป reserved_lft ตลอดไป
3: eno2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN กลุ่มเริ่มต้น qlen 1,000
    ลิงค์/อีเธอร์ 00:1e:c9:b5:b2:3e brd ff:ff:ff:ff:ff:ff
4: enp12s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state กลุ่มเริ่มต้น qlen 1000
    ลิงค์/อีเธอร์ 00:10:18:0d:a3:7e brd ff:ff:ff:ff:ff:ff
5: enp10s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP กลุ่มเริ่มต้น qlen 1000
    ลิงค์/อีเธอร์ f4:e9:d4:92:9d:d0 brd ff:ff:ff:ff:ff:ff
    inet 5*.2*.204.214/30 brd 5*.2*.204.215 ขอบเขต global enp10s0f0
       valid_lft ตลอดไป reserved_lft ตลอดไป
    ลิงค์ขอบเขต inet6 fe80::f6e9:d4ff:fe92:9dd0/64
       valid_lft ตลอดไป reserved_lft ตลอดไป
6: enp10s0f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP กลุ่มเริ่มต้น qlen 1000
    ลิงค์/อีเธอร์ f4:e9:d4:92:9d:d2 brd ff:ff:ff:ff:ff:ff
    inet 5*.2*.205.1/24 brd 5*.2*.205.255 ขอบเขต global enp10s0f1
       valid_lft ตลอดไป reserved_lft ตลอดไป
    inet6 ****::****:d4ff:fe92:9dd2/64 ลิงค์ขอบเขต
       valid_lft ตลอดไป reserved_lft ตลอดไป

ฉันได้กำหนดค่าเส้นทาง ip ต่อไปนี้:

ค่าเริ่มต้นผ่าน 5*.2*.204.213 dev enp10s0f0 โปรโตสแตติก
10.0.0.0/8 dev eno1 ลิงก์ขอบเขตเคอร์เนลโปรโต src 10.0.0.1
5*.2*.204.212/30 dev enp10s0f0 ลิงก์ขอบเขตเคอร์เนลโปรโต src 5*.2*.204.214
5*.2*.205.0/24 dev enp10s0f1 ลิงก์ขอบเขตเคอร์เนลโปรโต src 5*.2*.205.1

และต่อไปนี้บันทึกไว้ในของฉัน /etc/rc.local ไฟล์:

#!/bin/sh -e

iptables --ฟลัช
iptables --table แนท --flush
iptables -- ลบห่วงโซ่
iptables -- ตาราง nat -- ลบห่วงโซ่
iptables -F
iptables -X

###################### เปิดใช้งานแนท ########################## ##
sudo echo "1" > /proc/sys/net/ipv4/ip_forward

###################### เปิดใช้งาน Nat สำหรับภายใน ########################## #
iptables -t nat -A โพสต์ -o enp10s0f0 -j MASQUERADE
#iptables -t แนท -A โพสต์ -o enp12s0f1 -j MASQUERADE

################### เปิดใช้งานบันทึก ########################
#iptables -A OUTPUT -j บันทึก
#iptables -อินพุต -j บันทึก
#iptables -A FORWARD -j ล็อก

############# อนุญาตโดยค่าเริ่มต้น #####################
iptables -P อินพุตที่ยอมรับ
iptables -P เอาต์พุตที่ยอมรับ
iptables -P ยอมรับไปข้างหน้า

############################ อนุญาตการเชื่อมต่อขาเข้า ################### #########
iptables -A INPUT -m conntrack --ctstate "ESTABLISHED,RELATED" -j ยอมรับ

################################## อนุญาตการเชื่อมต่อขาออก ############# #########
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ยอมรับ

######################## อนุญาตภายในสู่ภายนอก
iptables -A FORWARD -i eno1 -m state "ESTABLISHED,RELATED" -j ยอมรับ
#iptables -A FORWARD -i eno1 -o enp12s0f1 -m state "ESTABLISHED,RELATED" -j ยอมรับ
###iptables -A ไปข้างหน้า -i eno1 -o enp10s0f1 -j ยอมรับ
iptables -A ไปข้างหน้า -i eno1 -o enp10s0f1 -j ยอมรับ
#iptables -A ไปข้างหน้า -i eno1 -o enp12s0f0 -j ยอมรับ
#iptables -A ไปข้างหน้า -i enp10s0f1 -o enp10s0f0 -j ยอมรับ
#iptables -A ไปข้างหน้า -i enp10s0f0 -o enp12s0f1 -j ยอมรับ
ทางออก 0

แผนภาพเครือข่าย: แผนภาพเครือข่าย เชื่อมโยงเนื่องจากฉันยังโพสต์รูปภาพไม่ได้

ดังที่คุณอาจสังเกตเห็นว่า ฉันใช้เวลามากมายในการอ่านทางออนไลน์ว่าวิธีที่ดีที่สุดในการเข้าถึงสิ่งนี้คืออะไร และส่วนใหญ่มีการแสดงความคิดเห็นเกี่ยวกับเรื่องนี้ อย่างที่ฉันคิด ฉันต้องการแค่ NAT บน อีโน1 อินเตอร์เฟซ. แต่เนื่องจากเป็น linux ฉันจึงต้องใช้ iptables เพื่อทำการกำหนดเส้นทางที่ไม่ใช่ NAT? ฉันลองปิดใช้งานแล้ว และเครือข่ายสาธารณะก็ใช้ไม่ได้เลย

แม้ว่าฉันจะได้งานชิ้นหนึ่ง แต่งานชิ้นอื่นก็พังอยู่ดี เป็นเวลาหลายปีแล้วที่ฉันเข้าเรียนในชั้นเรียนของ Cisco และฉันไม่คุ้นเคยกับความรู้สึกงมงาย ฉันหวังเป็นอย่างยิ่งว่าจะมีใครซักคนช่วยฉันหาวิธีที่ดีที่สุดในการนำสิ่งนี้ไปใช้ หรืออาจพบข้อผิดพลาดที่ฉันทำลงไปซึ่งเป็นสาเหตุของข้อผิดพลาด

Nikita Kipriyanov avatar
za flag
ปัญหาคืออะไรกันแน่? อะไรแตกใน "แต่ละกรณี" และอย่างไร และ "กรณี" คืออะไร นอกจากนี้ โปรดอย่าโพสต์สคริปต์ที่คุณใช้เพื่อตั้งค่าไฟร์วอลล์ โพสต์การส่งออกไฟร์วอลล์ที่กำลังทำงานอยู่ได้ดีขึ้น: `iptables-save`
Nikita Kipriyanov avatar
za flag
`5*.2*.205.0/24 ผ่าน 5*.2*.205.1 dev enp10s0f1` â คุณมีเส้นทางนั้นจริงหรือ จากการกำหนดค่าที่อยู่ IP ฉันคาดว่าจะเห็น `5*.2*.205.0/24 src 5*.2*.205.1 dev enp10s0f1` ซึ่งแตกต่างออกไปมาก
cn flag
ขอบคุณสำหรับการตอบกลับอย่างรวดเร็ว! ปัญหาที่ฉันพบส่งผลให้เครือข่าย **10.0.0.0/8** ไม่สามารถกำหนดเส้นทางได้ หรือเครือข่าย **5*.2*.205.1/24** ไม่สามารถกำหนดเส้นทางได้ ปัญหาใหญ่คือการไม่เข้าใจการกำหนดเส้นทาง Linux อย่างถูกต้อง ฉันเปลี่ยนการกำหนดค่า ลบ **iptables** ทั้งหมดโดยใช้ `iptables --flush` ตามด้วย `ip route del 5*.2*.205.0/24` และ `ip route add 5*2*.205.0/24 src 5*.2*.205.1 dev enp10s0f1` เนื่องจากข้อกังวลใหม่ของฉันคือ IP สาธารณะภายนอกไม่สามารถเข้าถึง IP สาธารณะ "ภายใน" ใดๆ ของฉันได้ IP สาธารณะสามารถเชื่อมต่อกับภายนอกได้โดยไม่ต้องใช้ **iptables** ในตอนนี้
cn flag
ฉันลอง `0.0.0.0/1 ผ่าน 50.220.205.1 dev enp10s0f1` โดยไม่มีโชค จะพยายามต่อไป!
cn flag
**เส้นทาง ip ใหม่** มีลักษณะดังนี้: `ค่าเริ่มต้นผ่าน 5*.2*.204.213 dev enp10s0f0 proto static 10.0.0.0/8 dev eno1 ลิงก์ขอบเขตเคอร์เนลโปรโต src 10.0.0.1 5*.2*.204.212/30 dev enp10s0f0 ลิงก์ขอบเขตเคอร์เนลโปรโต src 5*.2*.204.214 5*.2*.205.0/24 dev enp10s0f1 ลิงก์ขอบเขตเคอร์เนลโปรโต src 5*.2*.205.1 `
Nikita Kipriyanov avatar
za flag
คุณไม่จำเป็นต้องเพิ่มเส้นทางใด ๆ ด้วยตนเอง เส้นทางเดียวที่คุณต้องการคือเส้นทาง "ส่วนต่อประสาน" ที่เพิ่มเข้ามาเพื่อให้สอดคล้องกับเน็ตเวิร์กมาสก์ และเส้นทางเริ่มต้น คุณดูเหมือนจะมีทั้งหมด และอีกครั้ง iptables ไม่เกี่ยวข้องกับการกำหนดเส้นทาง นอกจากนี้ โปรดอัปเดตคำถามด้วยข้อมูลที่ปรับปรุงแล้ว แทนที่จะตอบกลับในความคิดเห็น ฉันคัดลอกตารางเส้นทางของคุณไว้ที่นั่น ที่เหลือขึ้นอยู่กับคุณ และคำตอบของฉันด้านล่างยังคงใช้ได้
cn flag
ขอบคุณสำหรับคำชี้แจง! คุณร็อค :-)
Score:1
ธง za

ฉันถือว่า ISP ของคุณตั้งค่าเส้นทางไปยังเครือข่าย 5*.2*.205.0/24 ต่อคุณผ่านทาง 5*.2*.204.214.

สมมติว่าสถานะต่อไปนี้: Netfilter อยู่ในสถานะเริ่มต้น (iptables-บันทึก ไม่แสดงกฎและนโยบายทั้งหมด ยอมรับ). เครือข่ายสาธารณะของคุณ 5*.2*.205.0/24 ใช้งานได้ โฮสต์มีเกตเวย์เริ่มต้น 5*.2*.205.1. เครือข่ายส่วนตัว 10.0.0.0/8 (มีเกตเวย์ 10.0.0.1) ใช้ไม่ได้เพราะไม่ได้ตั้งค่า NAT ฉันยังคาดหวังโฮสต์ใน 10.0.0.0/8 และ 5*.2*.205.0/24 เพื่อจะได้มองเห็นและสื่อสารกันได้

คุณแทบไม่ต้องทำอะไรเลยเพื่อให้บรรลุเป้าหมายนี้ เพียงตั้งค่า IP ทั้งหมดด้วยเน็ตมาสก์และเปิดใช้งานการส่งต่อ IP ในเคอร์เนล (เช่น net.ipv4.ip_forward=1). ตารางเส้นทางของคุณควรเหมือนกับตารางที่คุณมีอยู่แล้ว

สำหรับ 10.0.0.0/8 ในการทำงานกับอินเทอร์เน็ต คุณต้องเพิ่มกฎต่อไปนี้เท่านั้น:

iptables -t nat -A โพสต์ -o enp10s0f0 -s 10.0.0.0/8 -j MASQUERADE

มันจะทำ NAT สำหรับที่อยู่ "สีเทา" ที่ออกไปในป่า คุณสามารถแทนที่ -j สวมหน้ากาก ด้วยของ -j SNAT --to-แหล่งที่มา 5*.2*.205.1 (ที่อยู่ที่ได้รับมอบหมายให้ เอ็นพี10s0f1) หรือ 5*.2*.204.214.

หากคุณต้องการพิจารณาเครือข่าย 5*.2*.205.0/24 เหมือนกับอินเทอร์เน็ต คุณสามารถเพิ่มกฎ NAT อื่นและแปลการเชื่อมต่อที่มาจากกฎนั้น 10.0.0.0/8 ด้วย. กฎอีกข้อนี้จะเหมือนกับกฎข้อแรก ยกเว้นตัวกรองอินเทอร์เฟซขาออก -o enp10s0f1. แต่การปล่อยไว้โดยไม่มี NAT อาจเป็นประโยชน์ โดยเฉพาะอย่างยิ่งหากคุณควบคุมมากกว่าเครือข่ายและต้องการให้โฮสต์ในนั้นเห็นโดยตรง 10.0.0.0/8 ที่อยู่แทนที่จะปิดบังไว้ใต้ที่อยู่ของเกตเวย์

โพสต์คำตอบ

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