मेरे LAN पर IPv6 सर्वर पोर्ट अग्रेषित करने के लिए OpenWrt ट्रैफिक नियम कैसे सेट करें?


3

मैं अपने घरेलू नेटवर्क पर वैश्विक रूप से निष्क्रिय वेब सर्वर के लिए बंदरगाहों पर 80/443 में इनबाउंड IPv6 यातायात की अनुमति देना चाहूंगा। OpenWrt के साथ ऐसा करने का सबसे अच्छा तरीका क्या है, जो आने वाले IPv6 ट्रैफ़िक को डिफ़ॉल्ट रूप से ब्लॉक करता है (एक अच्छे फ़ायरवॉल के रूप में)?

मेरा ISP (Comcast) मुझे DHCPv6 के माध्यम से प्रतिनिधिमंडल के लिए / 60 उपसर्ग प्रदान करता है। यह कभी-कभी बदल जाता है। वेब सर्वर (उबंटू) को OpenWrt राउटर से SLAAC के माध्यम से एक वैश्विक IPv6 पता मिलता है।

Https://wiki.openwrt.org/doc/uci/firewall#port_accept_for_ipv6 के अनुसार आप इस तरह के ट्रैफ़िक की अनुमति देने के लिए ट्रैफ़िक नियम सेट कर सकते हैं:

पोर्ट 80 खोलने के लिए ताकि 2001 में एक स्थानीय वेबसर्वर: db8: 42 :: 1337 इंटरनेट से पहुंचा जा सके:

विन्यास नियम
        विकल्प src वान
        विकल्प प्रोटो टीसीपी
        विकल्प भाग्य लैन
        विकल्प dest_ip 2001: db8: 42 :: 1337
        विकल्प dest_port 80
        विकल्प परिवार ipv6
        विकल्प लक्ष्य ACCEPT

काफी आसान है, को छोड़कर .... गंतव्य आईपी हार्ड-कोडेड है!

जब गंतव्य आईपी संभावित रूप से बदल रहा हो, तो कोई इस प्रकार का नियम कैसे स्थापित कर सकता है? (मेरे ISP से प्रत्यायोजित उपसर्ग में परिवर्तन के कारण)। संभवतः, इसे समय-समय पर अद्यतन किया जाना है .... क्या किसी ने यह प्रयास किया है और यदि हां, तो क्या अच्छा काम करता है / अच्छी तरह से काम नहीं करता है?

जवाबों:


0

मुझे आपके समान समस्या और मृत अंत का सामना करना पड़ा। मैंने अपने लिए फ़ायरवॉल परिवर्तनों को स्वचालित करने के लिए एक त्वरित और गंदी स्क्रिप्ट लिखी।

#!/bin/sh

# CONFIGURABLE PARAMETER: PREFIX
# the prefix is the prefix of all the firewall rules that should be changed
PREFIX=DynamicIPv6
PREFIX_LEN=${#PREFIX}

# get current IPv6 prefix from WAN
. /lib/functions/network.sh
network_get_prefix6 prefix6 wan6
prefix6=$(echo $prefix6 | cut -d/ -f1)
prefix_len=$(expr ${#prefix6} - 1)
prefix6=${prefix6:0:$prefix_len}

changed=0
index=0
name=$(uci get firewall.@rule[$index].name 2> /dev/null)
while [ "$name" != "" ]; do
    subname=${name:0:$PREFIX_LEN}

    # if the prefix matches, determine whether to change the firewall rules
    if [ "$subname" == "$PREFIX" ]; then
            dest_ip=$(uci get firewall.@rule[$index].dest_ip 2> /dev/null)
            dest_network=${dest_ip:0:$prefix_len}
            host_addr=$(echo $dest_ip | awk -F: 'BEGIN { OFS=":"; } { print $5,$6,$7,$8 }')

            # if the firewall rule and prefix mismatch, update the firewall
            if [ "$dest_network" != "$prefix6" ]; then
                    changed=1
                    new_ip="${prefix6}${host_addr}"
                    uci set firewall.@rule[$index].dest_ip=$new_ip
                    uci commit firewall
            fi
    fi

    # advance to the next firewall rule
    index=$(expr $index + 1)
    name=$(uci get firewall.@rule[$index].name 2> /dev/null)
done

# if changes were detected, then reload the firewall
if [ $changed -eq 1 ]; then
    /etc/init.d/firewall reload 2> /dev/null
fi

स्क्रिप्ट का उपयोग करने के लिए:

  1. PREFIXस्क्रिप्ट का उपयोग करके अपने फ़ायरवॉल नियम बनाएं ।
  2. क्रोन का उपयोग करके चलाने के लिए स्क्रिप्ट को शेड्यूल करें।

ज्ञात समस्या: स्क्रिप्ट पूर्ण IPv6 पते तक सीमित है और इसका उपयोग नहीं किया जा सकता है :: छोटा हाथ। (उदाहरण के लिए, 2600: मृत: बीफ: कैफे: 0: 0: 0: 1 के बजाय 2600: मृत: बीफ: कैफे :: 1)।

पटकथा परिपूर्ण से दूर है, इसलिए दयालु बनें। मैं उम्मीद करता हूं कि यह स्क्रिप्ट आपको उपयोगी लगेगी। :)


इस उत्तर के लिए उपयोगी होने के लिए, आपको कम से कम कोशिश करनी चाहिए और समझाना चाहिए कि स्क्रिप्ट क्या करती है। Read it yourselfQ & A साइट पर उत्तर बहुत उपयोगी नहीं हैं, और वे निश्चित रूप से StackExchange पर अपटेड हैं।
मारियसमाटुटिया जूल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.