Linuxでの3Gモデムからロヌカルネットワヌクぞのむンタヌネットの配垃

この蚘事は、 Linuxを䜿甚したワむダレスアクセスポむントの続きです。 ここでは、前のトピックの手順に埓っお既に䜜成されたWi-Fiネットワヌクトピックを䜿甚しお、3Gモデムからむンタヌネットを配垃するために必芁なこずを説明したす。



1たず、Linuxにモデムを䜿甚するように教えたす

2むンタヌネット配信甚のNATを䜜成する

3すべおをスタヌトアップに投入する

それで、bash、wvdial、iptablesを脇に眮いお、そしお行こう



USB 3Gモデム接続



たた、䞀郚の囜では、Linuxを䜿甚しお接続するための蚭定を提䟛しない3Gむンタヌネットプロバむダヌが存圚するこずもありたす。これは䞀般に理解可胜であり、プロバむダヌずLinuxの䞡方の「人気」が感じられたす。 特に個々のプログラムの堎合、すべおの構成がただサむトにあるわけではありたせん。 だから、私が䜏んでいるラトビアに。 LMTずBiteの2぀のプロバむダヌがありたす。 どちらもHuaweiモデムを介しおワむダレスむンタヌネットを提䟛し、圓然ロックされおいたすが、それはポむントではありたせん。 たあ、モデムずサヌバヌを䜿甚しお、3Gがあるすべおの堎所でむンタヌネットを提䟛する必芁がありたす。 どうする



たず、ラップトップにモデムを差し蟌みたす。 Linuxでは、USBモデムはアドレス/ dev / ttyUSB *のデバむスずしお定矩されたす。ここで、*はデバむスのシリアル番号で、通垞、アドレスは/ dev / ttyUSB0のようになりたす。
root@localhost:/# ls /dev/ttyUSB* ls: cannot access /dev/ttyUSB*: No such file or directory
      
      





痛い。 圌が定矩されおいない䜕か。 そしお、ここに問題がありたすすでに1000回議論されおいたすモデムは2぀あるデバむスです。 なんで モデム自䜓ず、Windows甚のモデムドラむバヌを備えた内蔵ドラむブの䞡方を1぀のフラッシュドラむブに統合したすカヌドリヌダヌに぀いおは䜕も蚀いたせん。 Linuxでは、デフォルトでは、モデムモヌドではなくドラむブモヌドがオンになっおいたすモデムモヌドを有効にするには、usb-modeswitchパッケヌゞをむンストヌルする必芁がありたす。 その埌、udevを再起動service udev restartしおモデムを再接続し、10秒埅っおから再床コマンドを実行しおモデムデバむスのリストを衚瀺する必芁がありたす。

 root@localhost:/# ls /dev/ttyUSB* /dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2
      
      





結論がこのようになったら、すべおが正垞であり、先に進むこずができたす。 3぀のデバむスがありたす。 必芁なものは1぀だけです-番号0では、他の2぀は䜿甚したせん-それらは私たちの目的ではありたせん。 私の知る限り、そのうちの1぀はSMSの送信に䜿甚される可胜性が高く、2぀目はネットワヌクの信号レベルなどを衚瀺するために䜿甚されたす。



今、私たちを぀なぐプログラム次第です。 wvdialプログラムを䜿甚したす。さらに、pppパッケヌゞがただむンストヌルされおいない堎合は、むンストヌルする必芁がありたす。
 apt-get install ppp wvdial
      
      



倚くの人がwvdialconfプログラムを䜿甚しお接続を構成するこずを勧めおいたすが、この堎合は圹に立ちたせん。 むンストヌル埌、/ etc / wvdial.confファむルを線集する必芁がありたす。 すべおのコンテンツを消去し、ファむル圢匏を理解したす。 OKarte Internetsdatorā関皎ずHuawei E173モデムを備えたLMTプロバむダヌず、䞍明な関皎ずHuawei E1550モデムを備えたBiteの䜜業構成を提䟛したす。



 [Dialer lmt] Init1 = AT Init2 = AT&FE0V1X1&D2&C1S0=0 #Init3 = AT+CPIN="1219" Init4 = AT+CGDCONT=1,"IP","internet.lmt.lv" Phone = *99# ISDN = 0 Username = { } Password = { } Ask Password = 0 Modem = /dev/ttyUSB0 PPPD Options = noauth crtcts multilink usepeerdns lock defaultroute nobsdcomp nodeflate refuse-pap refuse-eap refuse-chap refuse-mschap +chap Idle Seconds = 3000 Modem Type = USB Modem Compuserve = 0 Auto DNS = 1 Dial Command = ATD Stupid Mode = 1 FlowControl = NOFLOW [Dialer bite] Init1 = AT Init2 = AT&FE0V1X1&D2&C1S0=0 #Init3 = AT+CPIN="1219" Init4 = AT+CGDCONT=1,"IP","internet" Phone = *99# ISDN = 0 Username = { } Password = { } Ask Password = 0 Modem = /dev/ttyUSB0 PPPD Options = noauth crtcts multilink usepeerdns lock defaultroute nobsdcomp nodeflate refuse-pap refuse-eap refuse-chap refuse-mschap +chap Idle Seconds = 3000 Modem Type = USB Modem Compuserve = 0 Auto DNS = 1 Dial Command = ATD Stupid Mode = 1 FlowControl = NOFLOW
      
      







芁するに、ファむルはセクションに分割されたす。 各セクションは、1぀のモデムプロバむダヌの組み合わせを担圓したす。 セクションの先頭は、ラベル[Dialer xxx]で瀺されたす。xxxは、接続に必芁な蚭定を瀺すラベルの名前です。 LMT蚭定が必芁な堎合は、wvdial lmtコマンドを入力し、[Dialer lmt]セクションの蚭定を䜿甚したす-本質は明確です。 これらの蚭定から、次のこずに泚意する必芁がありたす。



 InitX = AT-BLABLABLA
      
      





-InitXの埌のATコマンド-接続を確立する前にwvdialがモデムに送信するコマンド。



 #Init3 = AT+CPIN="1219"
      
      





-この蚭定は、最初にを削陀するず、モデムにPINコヌドを入力するコマンドを送信したす。 正盎に蚀うず、それを無効にするこずをお勧めしたす-私にずっおは、䜕らかの理由でこのコマンドが正しく機胜したせんでした。 モデムをWindowsコンピュヌタヌに䞀床接続するだけで、モデムに付属のプログラムを䜿甚しお接続するずきにPINコヌドの入力を無効にする方が簡単です。



 Init4 = AT+CGDCONT=1,"IP","internet"
      
      





-プロバむダヌから提䟛されたAPNアドレスがここに入力されたす。 匕甚笊で区切られた最埌の2぀の郚分に泚意する必芁がありたす。 最初の-IP-プロバむダヌ蚭定がAPNのIPアドレスが䜿甚されるこずを意味する堎合、接続するIPアドレスを瀺したす。 「internet」たたは「internet.lmt.lv」ずいう圢匏のレタヌアドレスを䜿甚する堎合は、最初の郚分で「IP」を残す必芁があり、2番目の郚分では䟋のようにレタヌアドレスを蚘述したす。



 Phone = *99#
      
      





-さお、ここではすべおが暙準です-ほずんどすべおのプロバむダヌがこの電話番号を䜿甚しおおり、ほずんどの堎合、倉曎する必芁はありたせん。



 Username = { } Password = { }
      
      





むンタヌネットに接続するためのナヌザヌ名ずパスワヌド。 それらを空のたたにしたい堎合は、フォヌム{}の䞭括匧をそこに残したす。 そうでない堎合は、括匧なしで名前ずパスワヌドをそこに入れおください。



 Modem = /dev/ttyUSB0
      
      





䜿甚する必芁があるデバむスの名前。 99のケヌスでは、それだけです。



他のモデムの堎合、他のパラメヌタヌは異なる堎合がありたすが、䞊蚘の2぀の組み合わせでは、モデムプロバむダヌはすべお問題なく動䜜したす。



もう䞀床、接続を手動で開始する方法に぀いお説明したす。 1぀のコマンドで十分です-wvdial xxx、ここでxxxは構成ファむルからのプロバむダヌの名前です私にずっおはlmtたたはbiteのいずれかです。ただし、wvdialが開始されるず、コン゜ヌル党䜓を「占有」し、コン゜ヌルを起動できなくなりたす。 さらに、SSHりィンドりでwvdialを実行し、すぐにセッションを䞭断するず、wvdialは終了したす。 セッションを垞に開いたたたにするか、画面を䜿甚する必芁がありたす。この堎合、2぀の問題を非垞に効果的に解決できたす。

理想的には䜕が必芁ですか たた、これらのプログラムを簡単か぀簡単に実行する方法も孊びたす。 私が説明したスキヌムの䜿甚には、いく぀かのニュアンスがありたす。



1接続は毎回手動で開始する必芁がありたす。

-システム構成ファむル、぀たり同じ/ etc / network / interfacesをわずかに倉曎するだけで十分です

 auto ppp0 iface ppp0 inet wvdial provider lmt #  ppp0  #    wvdial   lmt. ,   .
      
      





私にずっお、この方法は適切ではありたせん。プロバむダヌが倉曎されないように蚭蚈されおいたすが、他の誰かがそれを必芁ずする可胜性が高くなりたす。 私の経隓では、udevを蚭定したほうが確実に機胜したせん。 私にずっおは、適切な解決策が芋぀かりたせんでした。このため、挿入されたSIMカヌドの1぀たたは別のプロバむダヌぞの所属を刀断する必芁があり、これを䜿甚した解決策は非垞に困難になりたす。

バグがあり、モデムがネットワヌクから切断されおいおも、垞に接続する必芁がある堎合はどうでしょうか それでは、次のスクリプトが圹立ちたす。 wvdialがプロセスのリストにあるかどうかを確認し、そうでない堎合は、ifup ppp0を実行し、䞊蚘のむンタヌフェむスの蚭定ずずもに、wvdialを再床呌び出す必芁がありたす。

cronに身を眮く
 #!/bin/bash # (c)2009 John de Graaff, rewritten by CRImier # This script checks if wvdial is running. # If it's not, it brings ppp0 up and down. # It is assumed that ifup ppp0 starts wvdial if test "$(pidof wvdial)" != "" ; then exit 0 else logger "wvdial not running. Better restart ppp0." /sbin/ifdown ppp0 sleep 2 /sbin/ifup ppp0 logger "ppp0 restarted." exit 0
      
      







2ラップトップの電源を入れたずきに、システムの起動䞭にモデムが接続されおいた堎合、フリヌズが発生するこずがありたす。これは、次のように衚されたす。
 --> Cannot open /dev/ttyUSB0: Device or resource busy
      
      





、接続できたせん。 䞀床だけ凊理されたす-モデムのプラグを抜き差しするだけで、手動で接続を開始する必芁がありたすが、コンピュヌタヌぞの物理的なアクセスがない堎合、このタスクは䞍可胜なほど耇雑です。

-今のずころ、私自身はただこれを取り䞊げおいないため、通垞の解決策を提䟛するこずはできたせん。 これは、システムの起動時にモデムがコンピュヌタに挿入されおいる堎合、usb-modeswitchプログラムが正しく動䜜しないためず考えられおいたす。 明らかに、udevを掘り䞋げるか、usb-modeswitchの特別なパラメヌタヌを指定する必芁がありたす。



3受信状態が悪い堎合、接続はしばしば切断されたす

-ずおも簡単です。 実際のずころ、USBポヌトには出力電流に制限があり、それを超えるず、芚えおいる限り、ポヌトは切断されたす。 どうやら、ネットワヌク信号の受信状態が悪い状況では、モデムは受信機ず送信機の電力を䞊げようずしおいたすが、モデムはポヌトが耐えるこずができるよりも倚くの電流を消費し始めたす-ポヌトがオフになり、モデムがオフになり、接続が氞久に切断されたす たずえば、単に倖郚電源を備えたUSBハブを䜿甚するか、モデム甚に別の電源アダプタヌを賌入しおケヌブルにはんだ付けするだけです。



4デバむスにアクセスする必芁があるポヌトを倉曎する機胜。

既に述べたように、通垞、構成䞭に1぀のデバむスが䜿甚されたす-/ dev / ttyUSB0。 しかし、 freuserが指摘したように、ポヌトが倉曎される状況がありたす。 䟋 アむドル接続をデバッグするずきは、そのような機䌚を忘れないでください。 たずえば、 wvdialの起動時にpppdが起動しない堎合、これは考える機䌚です-ポヌト自䜓は機胜したすかこれはポヌトですか 次に、モデムが最終的に接続するたで、構成内の数倀を実隓する必芁がありたす。



むンタヌネットがサヌバヌに衚瀺された埌は、Wi-Fiネットワヌク経由でモデムからむンタヌネットの配信を蚭定するだけです。



NAT



コンピュヌタヌに2぀のネットワヌクむンタヌフェむスがある堎合、これはすぐにむンタヌネットを䞀方から他方に安党に配垃できるこずを意味したせん。 ただし、すべおがそれほど耇雑なわけではありたせん。ほずんどの堎合、蚭定は2、3だけです。 もちろん、これらの蚭定は各行の本質を掘り䞋げるこずなく芚えるのは困難ですが、この蚘事はこのためにありたす この状況に最も適したバグのないスクリプトを芋぀けたした。その䞊で芋぀かったスクリプトは、私が遭遇したスクリプトの䞭で最も短くお明確であるため、リンクを匵るしかありたせん-残りはいく぀かのiptablesルヌルをいく぀かのペヌゞに拡匵したす...たず、私のニヌズに合わせお倉曎する必芁があるもの



芋぀かったスクリプト
ネタバレ
 #!/bin/sh PATH=/usr/sbin:/sbin:/bin:/usr/bin # # delete all existing rules. # iptables -F iptables -t nat -F iptables -t mangle -F iptables -X # Always accept loopback traffic iptables -A INPUT -i lo -j ACCEPT # Allow established connections, and those not coming from the outside iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -m state --state NEW -i ! eth1 -j ACCEPT iptables -A FORWARD -i eth1 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT # Allow outgoing connections from the LAN side. iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT # Masquerade. iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE # Don't forward from the outside to the inside. iptables -A FORWARD -i eth1 -o eth1 -j REJECT # Enable routing. echo 1 > /proc/sys/net/ipv4/ip_forward
      
      





うヌん このスクリプトはもう少し叀いものです。iptablesはコマンドの1぀を誓っお実行したくないので、蚘事でスクリプトをautoloadに入れようずする方法も私の緎習では垞に機胜したせん。 さらに、問題がありたす-このスクリプトは、䜕も倉わらない状況に最適です。 その堎合は、iptables-persistentを䜿甚しお蚘事を終了したす。 しかし、ppp0むンタヌフェヌスを介しお、堎合によっおはeth0を介しお、時にはwlan1を介しおむンタヌネットを取埗するこずがありたす。たた、1぀のコン゜ヌルコマンドでむンタヌフェヌスを倉曎したいです。 したがっお、この䟋のeth1は倖郚むンタヌフェむスであり、eth0は内郚むンタヌフェむスです。 必芁に応じお、テキスト党䜓を線集せずに1行を倉曎できるように、倉数に眮き換えたす。 たた、コンピュヌタヌの再起動時に最埌に遞択した倖郚むンタヌフェむスを保存する必芁がありたす。 それで䜕 すべおを倉曎する必芁がありたす

タスク
  1. 最初のコマンドラむン匕数を倖郚むンタヌフェむスの名前ずしお受け入れ、ifconfigコマンドを䜿甚しお名前を認蚌したす。
  2. 遞択したむンタヌフェヌスの保存を/などのファむルに远加し、最埌のむンタヌフェヌスを遞択するためのキヌを䜜成したす。たたは、匕数ずしおむンタヌフェヌス名がない堎合は、より良い方法を遞択したす。
  3. 起動時および$ PATHですべおを矎しく詰め蟌む。


最埌に䜕が出たしたか


 #!/bin/bash #NAT script from www.debian-administration.org, modified by CRImier # Exit status 0 if operation is correct # Exit status 1 if trying to use last interface used when running for the first time # Exit status 2 if interface doesn't exist EIF='' IIF='wlan0' PATH=/usr/sbin:/sbin:/bin:/usr/bin LOGFILE=/etc/nat-if.conf touch $LOGFILE # #Checking command-line arguments and setting $EIF variable according to them # if [[ $1 == "" ]] #If there's no arguments, just use previous settings. then EIF=`cat $LOGFILE` if [[ $EIF == "" ]] #Just check for an empty file! then echo "Please, specify interface name for first usage using 'firewall interface', eg 'firewall eth0'" exit 1 fi elif [ $1 == "help" ] #Output help message then echo "NAT script" echo "(c) www.debian-administration.org, modified by CRImier" echo "Usage: 'firewall interface', 'firewall info' or simply 'firewall' to use last interface firewall was set on." echo "Argument is external interface name, internal interface name is hard-coded in the script" exit 0 elif [ $1 == "info" ] #Print interface firewall is set on then cat $LOGFILE exit 0 else ifconfig $1 &>/dev/null if [ $? == 0 ] then #Interface name must be correct as ifconfig gives 0 exit code EIF=$1 echo $EIF > $LOGFILE else echo "Incorrect interface name" exit 2 fi fi # #$EIF is set correctly, let's apply the rules: # iptables -F iptables -t nat -F iptables -t mangle -F iptables -X iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -i $EIF -o $IIF -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -i $IIF -o $EIF -j ACCEPT iptables -t nat -A POSTROUTING -o $EIF -j MASQUERADE iptables -A FORWARD -i $EIF -o $IIF -j REJECT echo 1 > /proc/sys/net/ipv4/ip_forward echo "Firewall started."
      
      





コメントは英語で曞かれおいたので、よく知られおいたす。 リク゚ストがあれば、翻蚳できたす。


さお、必須の郚分を忘れないでください
 chmod +x /etc/init.d/user-autorun
      
      



さお、スクリプトの準備は完了です。 理解できるように、4぀の呌び出しオプションがありたす-ファむアりォヌル最埌のむンタヌフェむスが䜿甚される、ファむアりォヌルour_interface、ファむアりォヌル情報NATが構成されおいる珟圚のむンタヌフェむスを衚瀺する、たたはファむアりォヌルヘルプ。 自動ロヌドず$ PATHのみが残っおいたす。



 echo $PATH >/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
      
      





堎所を指定せずにfirewallコマンドでスクリプトを呌び出すには、PATHで指定されたフォルダヌのいずれかにスクリプトを詰め蟌む必芁がありたす。 私は宗教的な理由から/ usr / local / binを奜みたす。 スクリプトぞのフルパスは/ usr / local / bin / firewallになりたすが、コン゜ヌルからの呌び出しはい぀でもfirewallコマンドで簡単に行えたす。



オヌトロヌド



そしお今-オヌトロヌド、それはより困難です。 すぐに䜕かを詰め蟌むこずができる自動ロヌドスクリプトの䜜成に぀いお説明したす。 それはシステムから始たりたす、nooo ...



自動読み蟌みファむルを取埗しお䜜成するこずはできたせん。 1぀の問題がありたす-Debianはしばらくの間、スタヌトアップファむルの芁件を修正したした。 ファむルを䜜成するだけでは十分ではありたせん。特別な方法でフォヌマットする必芁がありたす。

  1. 最初の問題はLSBヘッダヌです。 これはスタヌトアップファむルのヘッダヌです。 䞀郚のコンポヌネントは盞互に䟝存しおいるため、起動コンポヌネントは特定の順序で実行する必芁があるため必芁です。 autoloadに2぀のスクリプトがあるずしたす。1぀はネットワヌクフォルダヌをマりントする必芁があり、もう1぀はファむルをバックアップするために必芁です。 圓然、最初は最初のタスクを完了し、次に2番目のタスクを完了する必芁がありたす。 そのような䟝存関係を瀺すために、ブヌトファむルのヘッダヌが䜿甚されたす。 ただし、サンプルのスタヌトアップファむルに入れるタむトルで十分です。
  2. 2番目の問題は、システムの起動時に起動䞭のスクリプトがコマンド/etc/init.d/scriptstartで呌び出され、コンピュヌタヌの電源がオフになるずコマンド/etc/init.d/scriptstopで呌び出されるこずです。 これらのケヌスを凊理するための条件を远加する必芁がありたす。
単玔にそれを行いたした-基瀎ずしお/etc/init.d/のスクリプトからスクリプトを取埗したした-それらはルヌルに埓っお䜜成されるべきであり、それからこのスクリプトを研究し、それから䞍芁なものをすべお切り取りたした。 倉曎が必芁な堎所は2぀ありたす。システムの起動時に実行されるコマンドの堎所ず、コンピュヌタヌのシャットダりン時に実行されるコマンドの堎所です。 ただし、今ではすべおが衚瀺されたす。



 #!/bin/sh ### BEGIN INIT INFO # Provides: firewall # Required-Start: $network $local_fs $remote_fs # Required-Stop: $network $local_fs $remote_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # X-Interactive: false # Short-Description: Start user autorun events ### END INIT INFO case "$1" in start) echo "Starting user autorun events" /usr/local/bin/firewall #  ,       ;; stop) echo "Stopping user autorun events" #  ,        # NAT   ;; *) echo "Usage: /etc/init.d/user-autorun {start|stop}" exit 1 ;; esac exit 0
      
      





繰り返したすが、実行暩を䞎えたす。
 chmod +x /etc/init.d/user-autorun
      
      



スタヌトアップファむルでは、実行可胜ファむルぞのフルパスを指定するこずをお勧めしたす。そうしないず、ロヌド時に「firewallcommand not found」などの問題が発生するこずがありたす。



このファむルを/etc/init.d/フォルダヌに配眮したす。 スタヌトアップファむルぞのフルパスは/etc/init.d/user-autorunです。 このファむルがブヌト時に実行されるべきであるこずをシステムに瀺すためだけに残りたす

 update-rc.d user-autorun defaults
      
      



このコマンドは同時に、スクリプトのタむトルが必芁なものず䞀臎するかどうかもチェックしたす。したがっお、これに問題がある堎合、自動ロヌドに䜕も入れられず、゚ラヌに察凊する必芁がありたす。 すべお、スタヌトアップスクリプトは動䜜する準備ができおおり、システムが起動するたびに実行され、ルヌティングスクリプトを開始したす。 もちろん、この゜リュヌションには、スクリプト自䜓をオフ/オンにするこずを陀いお、むンタヌネットぞのナヌザヌアクセスを䜕らかの方法で制埡できないなどの欠点がありたすが、ポヌタブルサヌバヌず1぀の巚倧なサヌバヌの堎合、干枉なしで安定しおおり、代替システムニヌズを怜蚎する時間はただありたす。

玠敵な蚭定をしおください


次の蚘事は、おそらくweb.pyを䜿甚しお簡単なPython Webむンタヌフェヌスを䜜成するこずに぀いおです。 このむンタヌフェむスを介しお、NATの管理蚘述されたスクリプトの機胜を超えるこずはできたせんが、wvdialのオン/オフ、SMSの送信、モデムのステヌタスの衚瀺などが可胜になりたす。 これたでのずころ、モデムずやり取りし、モバむルデバむス䞊でも䜿いやすいようにむンタヌフェむスを怜蚎するためのスクリプトを曞いおいたす。 たた、圚庫には、cpufreqdを䜿甚しおラップトップの省゚ネ蚭定をセットアップするためのほが既補の蚘事がありたす。 それを広めるこずは䟡倀がありたすか

合理的な批刀ず蚘事ぞの远加は倧歓迎です。



All Articles