리눅스 NAT & QOS 관련 질문입니다 (tc 사용 관련)
안녕하세요.
현재 제가 리눅스로 공유기를 구현 중 입니다.
공유기 기능 중 QOS 서비스를 구현 중에 막히는 부분이 있어서 고수님들께 질문 드립니다.
네트웍 구조는..
internet ---- wan(eth0) - local - lan(eth1) ---- pc1, pc2..
이런 상태 입니다.
tc를 사용해서 QOS를 구현 중이 였는데요..
qdisc는 htb를 사용했습니다.
예를 들어서 eth0으로 나가는 패킷만 딜레이 시키려고 할 때
tc qdisc add dev eth0 root handle 1: htb default 100
tc class add dev eth0 parent 1: classid 1:1 htb rate 200kbit ceil 200kbit
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 60kbit ceil 60kbit
tc class add dev eth0 parent 1:1 classid 1:100 htb rate 140kbit ceil 140kbit
이렇게 셋팅을 하고..
공유기 로컬에서 iperf를 사용해서(공유기가 클라이언트) 다른 머신과의 속도측정을 해 보았는데
딜레이 되는 것을 확인 하였습니다. (디폴트가 적용되어 140kbit 정도..)
그런데 문제는 lan으로 들어와서 wan으로 나가는 경우로 테스트를 해보았는데
딜레이가 전혀 되지 않습니다.
= lan에 물린 pc(192.168.1.2)에서 iperf 테스트 결과 ============================
$ iperf -c xxx.xxx.xxx.xxx
------------------------------------------------------------
Client connecting to xxx.xxx.xxx.xxx, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.1.2 port 37024 connected with xxx.xxx.xxx.xxx port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.1 sec 6.66 MBytes 5.52 Mbits/sec
==============================================================================
= 공유기에서 class show (속도측정 중) ===========================================
# tc -s class show dev eth0
class htb 1:100 parent 1:1 prio 0 rate 140000bit ceil 140000bit burst 1599b cburst 1599b
Sent 224 bytes 4 pkt (dropped 0, overlimits 0 requeues 0)
rate 56bit 0pps backlog 0b 0p requeues 0
lended: 4 borrowed: 0 giants: 0
tokens: 1385719 ctokens: 1385719
class htb 1:10 parent 1:1 prio 0 rate 60000bit ceil 60000bit burst 1599b cburst 1599b
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
lended: 0 borrowed: 0 giants: 0
tokens: 3333328 ctokens: 3333328
class htb 1:1 root rate 200000bit ceil 200000bit burst 1600b cburst 1600b
Sent 224 bytes 4 pkt (dropped 0, overlimits 0 requeues 0)
rate 56bit 0pps backlog 0b 0p requeues 0
lended: 0 borrowed: 0 giants: 0
tokens: 970000 ctokens: 970000
==============================================================================
class show 결과로 봐서는 패킷을 인지 하는 것 같기는 한데..
왜 결과는 그냥 슉~슉~ 지나가는 것으로 나오는지 모르겠습니다.
아 참고로 mark를 해야 되나 해서
mangle 테이블의 모른 체인에서 (prerouting, forward, input, output, postrouting) make를 하고 해보았지만
마찬가지로 로컬에서는 딜레이가 잘 되고 lan에서 들어오는 것은 슉~슉~ 입니다.
또한 마찬가지로 class show에서는 mark와 관련 된 class에서 위의 결과 처럼 인지를 합니다.
NAT 환경에서는 htb를 사용하면 안되는 것인 지.. (혹은 tc말고 다른 것을 사용해야 하는지..)
제가 잘못 사용 하고 있는 것인 지.. (burst 값 등..)
NAT 환경에서 QOS를 구현 하신 분 있으시면 조언 부탁드립니다.
몇일 째 해결이 안되서 죽을 거 같아요~ ㅠㅠ
댓글 달기