กฎ ip ถาวรบน Linux (Redhat)


12

ฉันจะกำหนดค่า persistent ip ruleบน Linux ได้อย่างไร (โดยเฉพาะ Red dist based based) ไม่มีวิธีการในตัวหรือไม่? ตัวเลือกเดียวของฉันคือการเพิ่ม/etc/rc.d/rc.localหรือสร้างrc.dสคริปต์ของตัวเอง?

แก้ไข: เพื่อความกระจ่างฉันไม่ได้อ้างถึงiptablesแต่เป็นipเครื่องมือ (ซึ่งฉันไม่คิดว่าจะคุ้นเคยกับคนจำนวนมาก) ไม่ว่าในกรณีใดกฎที่ฉันพยายามคงอยู่จะถูกเพิ่มด้วยคำสั่งต่อไปนี้:

# ip rule add fwmark 1 lookup 100
# ip rule
...
32765: from all fwmark 0x1 lookup 100
...

การอ้างอิงเดียวที่ฉันพบในการทำเช่นนี้มาจาก Novell: http://www.novell.com/support/viewContent.do?externalId=7008874&sliceId=1ซึ่งแนะนำให้สร้างrc.dสคริปต์


คุณสามารถแบ่งปันกฎ IP ที่คุณต้องการยืนยันได้หรือไม่
ewwhite

กฎคือip rule add fwmark 1 lookup 100
รนต์

คำตอบ:


11

ตามธรรมเนียมแล้วฉันพบคำตอบสำหรับปัญหาของฉันหลังจากถาม :) พบคำตอบที่http://grokbase.com/t/centos/centos/099bmc07mq/persisting-iproute2-routes-and-rules

ใน Redhat 5+ /etc/sysconfig/network-scripts/ifup-routesสคริปต์จัดการrule-*ไฟล์ รหัสที่เกี่ยวข้องด้านล่าง:

# Routing rules
FILES="/etc/sysconfig/network-scripts/rule-$1"
if [ -n "$2" -a "$2" != "$1" ]; then
    FILES="$FILES /etc/sysconfig/network-scripts/rule-$2"
fi

for file in $FILES; do
   if [ -f "$file" ]; then
       { cat "$file" ; echo ; } | while read line; do
           if [[ ! "$line" =~ $MATCH ]]; then
           /sbin/ip rule add $line
       fi
       done
   fi
done

สคริปต์สำหรับ RHEL 6.5 (อาจเก่ากว่า 6+):

# Routing rules
FILES="/etc/sysconfig/network-scripts/rule-$1 /etc/sysconfig/network-scripts/rule6-$1"
if [ -n "$2" -a "$2" != "$1" ]; then
FILES="$FILES /etc/sysconfig/network-scripts/rule-$2 /etc/sysconfig/network-scripts/rule6-$2"
fi

for file in $FILES; do
   if [ -f "$file" ]; then
       handle_ip_file $file
   fi
done

handle_ip_file() {
    local f t type= file=$1 proto="-4"
    f=${file##*/}
    t=${f%%-*}
    type=${t%%6}
    if [ "$type" != "$t" ]; then
        proto="-6"
    fi
    { cat "$file" ; echo ; } | while read line; do
        if [[ ! "$line" =~ $MATCH ]]; then
            /sbin/ip $proto $type add $line
        fi
    done
}

6

ข้างต้นประมาณ 3/4 ของคำตอบ - ส่วนที่ขาดหายไปคือวิธีจัดรูปแบบไฟล์ / etc / sysconf / network-script / rule-ethX คุณต้องเพิ่มตารางเส้นทางไปยัง / etc / iproute2 / rt_tables:

# add a line with a table identifier and name:
100    ISPname

และเพิ่มไฟล์กฎ / etc / sysconfig / network-script / rule-eth0:

# rule-eth0
from 1.2.3.4/24 table {table name from /etc/iproute2/rt_tables}
to 1.2.3.4/24 table {table name from /etc/iproute2/rt_tables}

โปรดทราบว่าชื่อตารางจะต้องตรงกันและตรงตามตัวพิมพ์ใหญ่ - เล็ก


1

หมายเหตุหากคุณใช้ลำดับความสำคัญในไฟล์กฎเหล่านี้สำหรับกฎใด ๆ คุณต้องใช้ลำดับความสำคัญสำหรับกฎทั้งหมด มิฉะนั้นรายการที่ไม่มีลำดับความสำคัญจะถูกเพิ่มเข้าในเชน 0 สำคัญ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.