<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>查理布朗的倒楣世界 &#187; poptop</title>
	<atom:link href="http://clyang.net/blog/tag/poptop/feed" rel="self" type="application/rss+xml" />
	<link>http://clyang.net/blog</link>
	<description>Clyang's Murmuring</description>
	<lastBuildDate>Thu, 01 Sep 2011 01:48:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>使用MRTG觀察VPN(pptpd)上線人數</title>
		<link>http://clyang.net/blog/2009/02/01/111</link>
		<comments>http://clyang.net/blog/2009/02/01/111#comments</comments>
		<pubDate>Sun, 01 Feb 2009 13:02:01 +0000</pubDate>
		<dc:creator>clyang</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[技術]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[mrtg]]></category>
		<category><![CDATA[poptop]]></category>
		<category><![CDATA[pptpd]]></category>

		<guid isPermaLink="false">http://clyang.net/blog/?p=111</guid>
		<description><![CDATA[我的VPN伺服器是使用Poptop套件架設在Debian上，一旦有新的服務在手上，自然會好奇到底有多少人在使用，馬上浮現在腦海中的便是利用MRTG來做，實作起來也相當簡單，只需要編輯一個專屬的MRTG config檔以及自行撰寫一個shell script即可完成。 在開始前先來個真相一下: 首先編輯MRTG config檔案: /etc/mrtg.person.cfg #option WorkDir: /var/www/mrtg Options[_]:growright Target[vpn]: `/path/to/your/script/mrtg_person.sh` MaxBytes[vpn]: 64 Options[vpn]: gauge, nopercent, growright YLegend[vpn]: Online Users ShortLegend[vpn]: % LegendI[vpn]:   Online User: LegendO[vpn]:   Online User: Title[vpn]: clyang.net VPN Online User PageTop[vpn]: &#60;h1&#62;clyang.net VPN &#8230; <a href="http://clyang.net/blog/2009/02/01/111">繼續閱讀 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>我的VPN伺服器是使用Poptop套件架設在Debian上，一旦有新的服務在手上，自然會好奇到底有多少人在使用，馬上浮現在腦海中的便是利用MRTG來做，實作起來也相當簡單，只需要編輯一個專屬的MRTG config檔以及自行撰寫一個shell script即可完成。<span id="more-111"></span></p>
<p>在開始前先來個真相一下:</p>
<div id="attachment_119" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-119" title="Monthly VPN online user by MRTG" src="http://clyang.net/blog/wp-content/uploads/2009/02/vpn-month.png" alt="Monthly VPN online user by MRTG" width="500" height="135" /><p class="wp-caption-text">Monthly VPN online user by MRTG</p></div>
<p>首先編輯MRTG config檔案: /etc/mrtg.person.cfg</p>
<pre class="brush: html">
#option
WorkDir: /var/www/mrtg
Options[_]:growright

Target[vpn]: `/path/to/your/script/mrtg_person.sh`
MaxBytes[vpn]: 64
Options[vpn]: gauge, nopercent, growright
YLegend[vpn]: Online Users
ShortLegend[vpn]: %
LegendI[vpn]:   Online User:
LegendO[vpn]:   Online User:
Title[vpn]: clyang.net VPN Online User
PageTop[vpn]:
&lt;h1&gt;clyang.net VPN Online User&lt;/h1&gt;
&lt;table border=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;System:&lt;/td&gt;
&lt;td&gt;clyang.net VPN&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Maintainer:&lt;/td&gt;
&lt;td&gt;your@email.net.tw&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
</pre>
<p>接著編輯mrtg_person.sh，編輯完成後請記得chmod 755 mrtg_person.sh</p>
<pre class="brush: bash">
#!/bin/sh
echo `netstat -a | grep gre|awk &#039;{print $5}&#039;|sort | wc -l|awk &#039;{print$1}&#039;`
echo `netstat -a | grep gre|awk &#039;{print $5}&#039;|sort | wc -l|awk &#039;{print$1}&#039;`
UPtime=`/usr/bin/uptime | awk &#039;{print $3 &quot; &quot; $4 &quot; &quot; $5}&#039;`
echo $UPtime
echo clyang.net
</pre>
<p>最後編輯crontab檔案，加上一行:</p>
<blockquote><p>*/5 *   * * *   root    mrtg /etc/mrtg.person.cfg</p></blockquote>
<p>就大功告成了。</p>
<div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><!-- Do not remove -->]]></content:encoded>
			<wfw:commentRss>http://clyang.net/blog/2009/02/01/111/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debian Multi-WAN QoS Howto</title>
		<link>http://clyang.net/blog/2009/01/12/54</link>
		<comments>http://clyang.net/blog/2009/01/12/54#comments</comments>
		<pubDate>Sun, 11 Jan 2009 17:05:38 +0000</pubDate>
		<dc:creator>clyang</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[cbq]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[htb]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[Multi Wan]]></category>
		<category><![CDATA[poptop]]></category>
		<category><![CDATA[pptp]]></category>
		<category><![CDATA[QoS]]></category>
		<category><![CDATA[vpn]]></category>

		<guid isPermaLink="false">http://clyang.net/blog/?p=54</guid>
		<description><![CDATA[[注意] 引用本文請完整引用並須於引用文章中列上本文章的完整連結 [前言] 某個的vpn設置的時候是希望滿足兩個條件: 1) 隨時可以使用內部ip存取經過ip認證的服務。(如: IEL) 2) 利用固定制ADSL的路由優勢存取原本需要繞遠路的網域 (如:連往對岸)，增快存取速度。 [架構] vpn server的OS為Debian Etch，使用iptables根據目的地的ip來決定封包要透過哪一個interface出去，上圖為VPN的架構，eth0負責handle vpn的連線要求以及做NAT Gateway，而eth1則連接固定制的ADSL負責連往學術網路連線不佳的國家，試用了一陣子，跑起來一切美好，大家也很滿意。無奈人性是邪惡的，使用者一旦發現通往特定地區只要使用vpn就會變快時，就會不理會節約ADSL頻寬使用的柔性宣導，狂抽猛的使用善加利用導致當初的美意徹底被摧毀，同時也降低使用者使用的意願。(本來學網夠慢了，結果用了VPN速度反而越來越慢誰會想用 zZzZZzzz) 因應的方法便是限制user在使用ADSL這段的速度，讓大家都可以使用到合理的速度。 [QoS Howto] 之前使用cbq.init來當做solution，why cbq。init? 因為它的設定最簡單，完全就是懶人的最愛，可惜它的queueing方式不太優良，導致沒有辦法做更精準的限制，所以研究了一下改用HTB來做。HTB跟CBQ差在哪呢? 請自行參考HTB官方網頁的說法。 (http://luxik.cdi.cz/~devik/qos/htb/old/htbmeas1.htm) QoS怎麼套入這個架構呢? 由於poptop這個vpn server會為每個連線建立一個ppp的interface，而系統會在每個ppp interface啟動時自行呼叫/etc/ppp/ip-up，所以我在這個script最下方加上QoS的設定，之後每個連線都會自動被套用上這個設定。首先先針對下載的部分做限制，由於頻寬較為充裕，最多可以允許768kbps的速度，設定如下: # Download Speed QoS of ADSL! offer at least 720Kbps (Max &#8230; <a href="http://clyang.net/blog/2009/01/12/54">繼續閱讀 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h4>[注意]</h4>
<p>引用本文請完整引用並須於引用文章中列上本文章的完整連結</p>
<h4>[前言]</h4>
<p>某個的vpn設置的時候是希望滿足兩個條件: 1) 隨時可以使用內部ip存取經過ip認證的服務。(如: <a title="IEL" href="http://ieeexplore.ieee.org/" target="_blank">IEL</a>) 2) 利用固定制ADSL的路由優勢存取原本需要繞遠路的網域 (如:連往對岸)，增快存取速度。</p>
<h4>[架構]</h4>
<div id="attachment_62" class="wp-caption aligncenter" style="width: 440px"><img class="size-full wp-image-62" title="vpn structure" src="http://clyang.net/blog/wp-content/uploads/2009/01/vpn.png" alt="vpn structure" width="430" height="270" /><p class="wp-caption-text">vpn structure</p></div>
<p><span id="more-54"></span>vpn server的OS為Debian Etch，使用iptables根據目的地的ip來決定封包要透過哪一個interface出去，上圖為VPN的架構，eth0負責handle vpn的連線要求以及做NAT Gateway，而eth1則連接固定制的ADSL負責連往學術網路連線不佳的國家，試用了一陣子，跑起來一切美好，大家也很滿意。無奈人性是邪惡的，使用者一旦發現通往特定地區只要使用vpn就會變快時，就會不理會節約ADSL頻寬使用的柔性宣導，<span style="text-decoration: line-through;">狂抽猛的使用</span>善加利用導致當初的美意徹底被摧毀，同時也降低使用者使用的意願。(本來學網夠慢了，結果用了VPN速度反而越來越慢誰會想用 zZzZZzzz)</p>
<p>因應的方法便是限制user在使用ADSL這段的速度，讓大家都可以使用到合理的速度。</p>
<h4>[QoS Howto]</h4>
<p>之前使用cbq.init來當做solution，why cbq。init? 因為它的設定最簡單，完全就是懶人的最愛，可惜它的queueing方式不太優良，導致沒有辦法做更精準的限制，所以研究了一下改用HTB來做。HTB跟CBQ差在哪呢? 請自行參考HTB官方網頁的說法。 (<a title="HTB vs CBQ" href="http://luxik.cdi.cz/~devik/qos/htb/old/htbmeas1.htm" target="_blank">http://luxik.cdi.cz/~devik/qos/htb/old/htbmeas1.htm</a>)</p>
<p>QoS怎麼套入這個架構呢? 由於poptop這個vpn server會為每個連線建立一個ppp的interface，而系統會在每個ppp interface啟動時自行呼叫/etc/ppp/ip-up，所以我在這個script最下方加上QoS的設定，之後每個連線都會自動被套用上這個設定。首先先針對下載的部分做限制，由於頻寬較為充裕，最多可以允許768kbps的速度，設定如下:</p>
<pre class="brush: bash">
# Download Speed QoS of ADSL! offer at least 720Kbps (Max 768Kbps) for user
/sbin/tc qdisc add dev $1 root handle 2: htb
/sbin/tc class add dev $1 parent 2: classid 2:1 htb rate 720kbit ceil 768kbit
/sbin/tc filter add dev $1 protocol ip parent 2:0 prio 1 handle 6 fw flowid 2:1
</pre>
<p>這邊使用一個技巧，由於我們可以確定ADSL的inbound一定會從eth1進來，所以我們利用iptables可以將封包加上mark的功能，將eth1進來的封包都加上mark (標號為6) 所以就可以利用這個mark去做tc的filter依據。iptables加上mark指令如下:</p>
<blockquote><p>/sbin/iptables -A PREROUTING -t mangle -i eth1 -j MARK &#8211;set-mark 6</p></blockquote>
<p>下載限速的部分就大功告成啦。</p>
<p>接著則是上傳速度限制的部分，礙於ADSL的uplink頻寬普遍不大，為了避免濫用，每個user限制只能使用128kbps。首先在eth1上面掛載一個root qdisc:</p>
<blockquote><p>/sbin/tc qdisc del dev eth1 root<br />
/sbin/tc qdisc add dev eth1 root handle 2: htb r2q 8</p></blockquote>
<p>接著編輯/etc/ppp/ip-up:</p>
<pre class="brush: bash">
# 限制個別user對ADSL端的上傳速度
#取得撥進來的user目前是使用哪個ppp interface
interface=$1

#針對不同的使用者給予特定的標記
contamark=`echo $interface | cut -c 4-99`
mark=`expr $contamark + 500`

#由於vpn架設時,已經先把送往eth1的封包都標成1了
#所以下面這行指令的意思是(當中的$5則是使用者撥入後取得的ip):
#當封包的source ip是$5 且 已經被標記成 mark 0x1了
#就把該封包套用到使用者專屬的tc-class
/usr/local/sbin/iptables -t mangle -A POSTROUTING -s $5 -m mark --mark 0x1 -j CLASSIFY --set-class 2:$mark

#建立使用者專屬的tc-class
/sbin/tc class add dev eth1 parent 2: classid 2:$mark htb rate 128kbit ceil 128kbit
</pre>
<p>最後，編輯/etc/ppp/ip-down，當使用者斷線後刪除相關設定。</p>
<pre class="brush: bash">
# remove download tc disc
/sbin/tc qdisc del dev $1 root

# remove uplink limit
interface=$1
contamark=`echo $interface | cut -c 4-99`
mark=`expr $contamark + 500`

/usr/local/sbin/iptables -t mangle -D POSTROUTING -s $5 -m mark --mark 0x1 -j CLASSIFY --set-class 2:$mark
/sbin/tc class del dev eth1 parent 2: classid 2:$mark htb rate 128kbit ceil 128kbit
</pre>
<h4>[結論]</h4>
<p>對於ADSL端做出QoS限制後，反應良好、使用者人數回流、ADSL使用率增加(之前因為uplink被吃光導致download速度受阻)。最後當然是有圖有真相啦:</p>
<div id="attachment_67" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-67" title="vpn_traffic" src="http://clyang.net/blog/wp-content/uploads/2009/01/vpn_traffic.png" alt="vpn mrtg traffic" width="500" height="135" /><p class="wp-caption-text">vpn mrtg traffic</p></div>
<div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><!-- Do not remove -->]]></content:encoded>
			<wfw:commentRss>http://clyang.net/blog/2009/01/12/54/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

