[목차] == 개요 == 2000년대 초에는 지금과는 달리 인터넷 공유기를 저렴하게 구입할 수 없었다. 그래서 당시 대세이던 ADSL을 공유하기 위해 창고에서 잠자고 있던 구형 x86 PC[* 2000년대 이전에는 컴퓨터의 성능 발전이 매우 빨랐기 때문에 당시 제법 괜찮은 성능의 컴퓨터를 장만해도 조금만 시간이 지나면 공간만 차지하는 퇴물단지가 되어버리기 일쑤였다.]에 리눅스나 FreeBSD 등을 깔아 CLI로 명령어를 쳐서 설정하는 공유기를 직접 제작 및 운용하기도 했었다. 일명 ''''소프트웨어 라우터''''. 당시 인터넷 환경상 10Mbps정도면 충분했기에 386 CPU에 4MB RAM 정도만 되어도 리눅스 깔아서 그럭저럭 사용할 수 있었던 모양. 이후 가정용 공유기가 시중에 매우 저렴하게 풀리고 아예 통신사들이 끼워주기까지 하는 현재 상황에서, 이것을 조립하는 것은 다소 생소하게 느껴지기도 한다. 그래도 현대 사회에서 매우 보편적으로 사용되는 [[AMD64]] 기반 [[데스크탑]] [[컴퓨터]]는 이 '소프트웨어 라우터' 역할을 하기에 매우 힘차고 훌륭한 성능을 가지고 있다. 데스크탑의 확장 슬롯에 이더넷 카드(랜카드)를 설치해 이를 공유기로 활용할 수 있는데, 왠만한 고급 공유기 뺨을 후려치고도 남는 성능을 자랑할 것이다. [include(틀:문서 가져옴, this=문단, title=인터넷 공유기, version=732, paragraph=6)] == 용도 == 보통은 이런 공유기가 필요하지 않지만, 일반 가정에서 다음과 같은 사용목적이 있다면 매우 유용하게 쓰인다. * '''[[10기가비트 이더넷]] 환경 구축''' 통신사에 10기가비트 인터넷을 신청하면 아직은 1대의 컴퓨터만 10기가를 온전히 사용한다는 전제 하에 보급을 하는지, 10기가비트 공유기를 제공하지 않는다. 그래서 그 넓은 대역폭을 여러 네트워크 장치들이 나눠쓰려면 공유기를 별도로 구매해야 하는데[* 이 경우 공유기(또는 공유기 목적을 할 랜카드/컴퓨터의) MAC주소를 알려달라고 하는 경우가 있다.] 문제는 가정용 공유기로 시판되는 제품 중에서 10기가를 지원하는 제품이 없다. 값비싼 고성능 공유기도 업링크는 2.5기가가 최대 대역폭인 경우가 많다. 기업용 라우터는 일찍이 10기가 제품이 보편화되었으나 가격이며 전력소모며 가정에서 쓰기는 다소 부적합하다. 이럴때 10기가비트 랜카드 여러개를 PC에 장착해 공유기 대신 사용함으로써 기업용 라우터보다는 저렴하게 문제를 해결할 수 있다. * '''공유기의 [[VPN]] 클라이언트화''' 공유기를 통째로 VPN 클라이언트로 활용함으로써, '''해당 공유기에 연결하는 모든 장치를 별도의 설정 없이 바로 VPN에 연결되는 환경을 구축'''할 수 있다. 해당 기능 자체는 기성품 공유기도 중급기 이상이면 대개 지원은 한다. 허나 VPN 프로토콜의 특성상 칩셋은 패킷의 암호화를 수행한 후 암호화된 패킷을 VPN 서버로 보내야 하는데, 정작 그 칩셋의 연산속도 자체가 느려서 속도가 느려지거나 지연시간이 높아지는 사태가 왕왕 벌어지게 된다. 반면 PC 기반 소프트웨어 라우터는 컴퓨터용 CPU 특유의 높은 성능을 그대로 활용할 수 있어 웬만해서는 속도가 잘 나온다. 설령 PC가 좀 구형일지라 하더라도 절대 다수는 전성비는 별로일지연정 기성품의 칩셋보다는 연산성능이 좋은 경우가 많다. 한편, 라우팅용 운영체제 및 설정에 따라서 포트별/기기별로 VPN의 사용 여부를 설정할 수도 있고, 이를 기본 기능으로 제공하는 경우도 있다.[* 인텔 i5 린필드 760 , DDR3 PC3200 8GB 기준으로 1Gbps 정도의 속도를 가지는 OpenVPN 구동은 매우 여유있게 가능하다. 2.5Gbps까지도 2~3대 수준의 연결은 성능하락 없이 가능은 하며 WireGuard로 구성시 10Gbps도 3대정도는 까지는 아슬아슬하게 버텨준다.] VPN 서버 구축 목적으로도 자작 공유기를 활용할 수 있다.[* 이것 또한 웬만한 기성품 공유기에 다 있지만, 역시 연산속도가 많이 느려서 속도가 잘 안나온다.] 한국 가정집 대상 [[인터넷 서비스 제공사업자|ISP]]의 인터넷 환경에서는 [[warning.or.kr|어떤 이유]] 때문에 VPN 서버 수요가 별로 없어서 큰 의미는 없지만, 인터넷 검열이 거의 없는 국가에서 거주하고 있는데 한국 같은 곳을 자주 방문할때 유료 VPN 서비스 대용으로 사용해 볼 만하다. 다만 이런 용도로 사용할 경우 랜카드가 주렁주렁 달린 공유기보다는 램 빵빵하고 VPN 구축용 OS 또는 소프트웨어가 설치된 서버를 자작하는 게 더 낫다. * '''방화벽''' 기성품 공유기에 딸려나오는 방화벽 기능은 제한이 좀 있다. 차단 도메인 갯수에 제한이 있다던지, 좀 철지난 구형 제품이라면 https 도메인이 차단되지 않는다던가 등. 자작 공유기는 OS를 마음대로 바꿀 수 있으므로 방화벽 기능이 우수한 OS를 설치하여 이 문제를 해결할 수 있다. OS에 따라서 방화벽 기능과 사이트 차단 기능을 분리해 놓은 경우도 있다. 단, __'''[[GoodbyeDPI]] 같은 차단 우회 툴이 제대로 작동되지 않을 정도로''' 성능이 정말 강력하기 때문에,__ 해당 툴을 사용하고 있다면 방화벽 사용은 가능하면 피하는 게 좋으며, 정 써야 한다면 도메인 차단 기능만큼은 사용하지 말아야 한다.[* 일부 라우팅 특화 OS는 방화벽에서 SNI 검출 여부를 선택할 수 있다.] 물론 후술할 VPN 클라이언트 기능과 같이 쓰는 경우라면 좀 이야기가 많이 달라진다. * VPN 클라이언트+방화벽 조합 '''방화벽과 VPN 클라이언트 기능을 병행해서 사용하고, 인터넷 검열을 시행하지 않는 ISP에서 서비스하는 VPN에 연결'''하면 [[방심위]]와 ISP가 막아놓은 사이트에 온전히 접속할수 있음과 '''동시에''', 정작 차단되어야 마땅하지만 방치되고 있는 --[[워마드]]-- --[[디지털 교도소]]-- 사이트로의 접속시도를 네트워크 단위에서 손쉽게 저지할 수 있다. 즉, '''[[사이다(유행어)|사용자가 제3자의 간섭 없이 어떤 사이트에 접속을 허용하고 금지할지 직접 설정할 수 있다.]]''' 단, 해당 공유기를 통과하는 네트워크에서만 유효하다. * '''좀 더 쾌적한 다중 기기 연결''' 역시 연산성능이 좋기 때문에 많은 기기를 동시 사용할때 버벅임이 적은 편이다. 그 외에도 QoS와 같이 가정용 공유기에서는 제대로 지원하지 않거나, 엔터프라이즈 레벨 이상에서야 지원하는 기능을 가정에서 사용하는 등 활용성은 그야말로 무궁무진하다. == 장점 == * 훌륭한 가성비: 구축에 필요한 절대적인 가격은 높을지언정, 가성비는 훌륭하다. 소프트웨어 라우터를 구축하는데 소모되는 비용을 기성품 공유기를 구입하는데 사용하면, 절대 동 가격의 소프트웨어 라우터의 성능이 나오지 않는다. * 무한한 확장성: 4포트 랜카드를 여러개 꽂거나 광랜(Fiber to Fiber)카드를 꽂아서 기업용 제품 부럽지 않은 라우터를 구성할 수 있다. OS차원의 확장성도 무시 못한다. 실력이 된다면 랜카드 외의 다른 확장카드를 붙여서 공유기 외의 여러 용도로 사용할수도 있다. 성능 업그레이드도 쉽다. 부품을 좀 더 상위의 것으로 바꾸기만 하면 된다. 운영체제도 공유기로 활용할수 있는 기능이 있다면 실력에 따라, 편의성에 따라 자신에게 필요한 기능만 사용하거나 기능을 더 추가 할수도 있다. * 수리의 용이성: 고장났을 경우 일반 데스크탑 수리하듯이 부품을 교체하는 등으로 쉽게 대응할 수 있다. 기성품 공유기였다면 전자기기의 지식이 빠싹하고 전문 수리도구를 소지하고 있는게 아니라면 통째로 서비스센터로 보내거나 버리고 새로 사야 할 것이다. * 사용했던 중고 컴퓨터를 재사용해서 구축할 수도 있다. * --멋있다. 부품 특유의 투박함 덕분에 보는 맛이 있다.-- --남에게 자랑하기도 좋다.-- --우리 집은 [[GoodbyeDPI|별도의 툴]] 없이 '''와이파이에 연결하는 것만으로도 야동사이트에 바로 접속할 수 있지롱!'''-- --워마드 차단은 덤!-- == 단점 == * 전력 소모량이 기성품 공유기보다는 많이 나오며, 이는 특성상 어쩔 수 없는 부분이니 이를 감안하여야 한다. 그래도 저전력 사무용 CPU를 사용한다면 메인보드의 CPU 클럭 배수 조절 기능을 이용하여 언더클럭시켜 셋톱박스보다 전력을 조금 더 먹는 수준으로 낮출 수도 있다. * 덩치가 크다. 케이스를 작은걸 쓰면 어느 정도 해결되지만 기성품 공유기 정도는 아니다. 공간이 협소하다면 부담스러울 것이다. * 아무래도 커스텀해서 사용하는 만큼 기성품 보다는 안정성이 다소 떨어질 수 있다. ECC램을 사용하는 등 좀 더 신경써서 빌드한다면 좀 나아지겠지만, 비용이 증가하게 된다.[* 단, 대부분의 가정용 공유기는 ECC를 지원하지 않으므로 안정성에는 별 차이가 없을 수도 있다.] * 낙하충격에도 기성품보다 취약하다. 책상 높이에서 떨어뜨린다면 단자 간 접촉불량으로 정상작동하지 않을 수 있다. 케이스에 살짝 변형이 올 위험이 있는건 덤. * 전면 LED 인디케이터의 부재: 전면에는 전원램프와 저장소 사용 램프만이 존재할 뿐이다. 랜이 잘 동작하는지 보려면 반드시 후면을 들춰내어야 한다. == 직접 만들기 == === 준비물 === 흔히 볼 수 있는 데스크탑 컴퓨터를 사용하고자 하는 경우에는 다음과 같은 [[준비물]]이 필요하다. 일반 데스크탑과 크게 다르지는 않지만 CPU와 메인보드의 PCIe 레인 수, 저전력 CPU(권장) 등을 고려할 필요가 있다. * 아래는 조립PC 시스템을 기반으로 할 경우이다. 구글에 4 lan mini pc, 6 lan mini pc, multi NIC mini pc, VPN mini pc, firewall pc 등으로 검색하면 램과 ssd, 무선랜카드, 안테나만 끼우면 작동 가능한 베어본 시스템을 판다. 보통 보드에 4~8포트 NIC(랜카드 칩셋)이 내장되어 있다. 이 것을 사다가 부품을 추가해서 사용하면 공유기보다 조금 큰 크기에, 전력도 풀로드 기준 본체 전체 전력이 30~40w 미만으로 먹으면서 그럴듯한 모양새를 가지면서도 소프트웨어를 자기 맘대로 구성할 수 있는 반조립 PC 세트를 판매한다. 가격은 배송비 포함 8~30만원 선. [[https://mw.wemakeprice.com/product/958863326?utm_source=mgoogle_ss&utm_medium=cpc&utm_campaign=r_sa&gclid=CjwKCAiAr6-ABhAfEiwADO4sfcCy4tVpbjJIpBUA9fb31sU7w-3-uF85_cqVRvtR8_roWMGRQ70FvRoC3ZQQAvD_BwE|이런 제품들을 말한다. 국내 쇼핑몰에는 산업용 pc라고 검색하면 몇몇 보인다.]] 개인의 취향 차이긴 하지만 이런 반조립 제품을 사용한다면 셋트를 사다가 SSD와 램만 꽂아주면 하드웨어는 구성 끝이다. 네트웤 관련 하드웨어는 이미 다 구성이 되어있을 것이다. 또한 대부분은 2.5인치 하드를 1~2개 장착이 가능하므로 공유기 기능과 동시에 NAS 서버의 기능을 겸할수도 있다. 자세한 것은 여담 문단 참고바람. 중국제가 껄끄러우면 돈을 더 주고 대만제나 일본제를 사면 된다. 다만 그럴 경우 최소 30만원 이상 깨질것이다. * 첫번째, 일반 데스크탑과 마찬가지로 메인보드, CPU, RAM, SSD/HDD[* USB 메모리로 대체해도 된다. 메인보드 안쪽에 USB포트가 있는 서버 메인보드라면 시도해 볼 만하다.] 등이 필요하다. * '''[[CPU]]는 저전력 혹은 사무용을 사용하는게 좋다.''' 아무리 하드웨어 가속 기능이 없는 소프트웨어 라우터를 구성하더라도 현행 사무용 데스크탑 및 일반 노트북 수준의 CPU면 충분하다. 오히려 사무용 컴퓨터의 처리 성능이 현존하는 고성능 [[인터넷 공유기|공유기]]보다 좋다. 아니, 좋을 수밖에 없다. 애초에 목적이 다른 기기니까. 다만 너무 구형인 제품은 가정에서 24시간 굴려먹기엔 성능 대비 전력소모를 많이 차지하는 제품도 있으니 잘 알아보고 채택하도록 하자. VPN 기능을 사용할 예정이라면 AES-NI가 지원되는 CPU를 사용하면 더욱 좋다. CPU 점유율 차이가 제법 나며, CPU 점유율을 적게 차지할수록 전력소모에서 더 많은 이득을 볼 수 있다. 그리고 대중적으로 많이 사용되는 [[OpenVPN]]은 그 특성상 코어 한개만 굴리는 것으로 악명이 높다. 그러므로 비교할 두 제품의 성능이 비슷하다는 전제 하에, 저성능 코어를 쿼드/옥타코어로 구성된 물건보다는 비록 듀얼코어 일지라도 싱글코어 성능이 우수한 물건을 고르는 편이 더 낫다. * '''[[CPU]]와 [[메인보드]]가 지원하는 기능과 최대 [[PCIe]] 버전 및 레인 수를 고려해야 한다.''' [[인텔]]제 저전력, 사무용 CPU 대부분은 최대 16레인을 지원한다. 반면 [[AMD]]의 경우 현재 신품으로 팔리는 저전력 사무용 CPU들은 8레인, 싼건 4레인만 제공하는 제품이 대부분이니 잘 알아보고 사용해야한다. PCIe 3.0 16레인이 어느정도의 대역폭이냐면, 8레인 2개로 분배해주는 기능이 있는 메인보드에서 10기가비트 쿼드포트 확장카드를 2개 연결할 수 있는 수준이다. 그리고 CPU하고는 별개로 메인보드 자체 칩셋에서도 PCIe 레인을 제공한다. 허나 메인보드가 16배속 슬롯 하나만 있는 경우(m-ITX 등), 모종의 이유로 여러 장의 확장카드를 설치할 수 없는 경우에는 확장성이 떨어지므로 권장하지 않는다. 메인보드 중에서는 슬롯 겉모양은 PCIe x16인데, 정작 핀 개수가 PCIe x4 수준인 물건도 있다. 보통 두번째 PCIe x16 슬롯이 그런 경우가 많은데 구매 전 사진과 상세 스펙을 꼼꼼히 살펴보고, 듀얼포트 이상의 랜카드를 여러개 꽂을 계획이라면 이런 제품은 피하는것이 좋다. 한편 구형 제품, 또는 일부 제품 중에서는 PCIe 버전이 2.0인 경우가 있는데 2.0은 3.0 대비 입출력 속도가 절반이기 때문에 1기가비트는 넉넉하지만 10기가비트 확장카드 사용시 문제가 될 수도 있다. 일부 메인보드는 FSB 배수조절 기능 자체가 없을 수 있다. 주로 완제품 PC에 들어가는 OEM 메인보드들이 그렇다. 이런 메인보드를 사용하면 언더클럭이 되지않아 전력소모에서 손해를 볼 수 있다.[* CPU 배수락은 오버클럭만 차단할뿐, 언더클럭에는 영향이 적다. 물론 극단적인 언더클럭으로 손상이 되는 걸 막기 위해 배수 최하값에 하한제한을 걸어놓기는 한다.] * '''[[메모리]]는 운영체제에서 요구하는 만큼 적절하게 준비한다.''' OS나 사용할 프로그램에 따라 메모리 사용량이 달라질 수 있다. 특히 [[X11]]과 같은 GUI를 구동한다면 2 GB 이상이 권장된다. 그래도 대부분의 공유기의 메모리가 아직도 256MB~2 GB를 넘지 않는 점을 고려하면 그리 높은 용량을 필요로 하지는 않는다. 소프트웨어 라우터를 대용량의 캐시 서버로 이용할 것이 아니라면 메모리 용량은 많아도 별 소용이 없다. 데비안을 CLI와 아주 기본적인 프로그램만 설치하면 메모리를 100 MB 이상 사용하는 경우도 드물다. 궁극적으로, 메모리는 NAT 성능에 큰 영향을 미치지 않는다. 다만 설치할 OS마다, 그리고 프로그램마다 차지하는 가용 용량이 다르기 때문에 권장 램 용량을 확인하고 이에 맞추어 장착하는 것이 바람직하다. * '''전원부는 반드시 철저하게 고려해야 한다.''' 소프트웨어 라우터는 24시간 켜져있는 장비이다. 전원 공급 부분이 부실하면 다음날 컴퓨터 위에 불기둥이 솟아올라도 이상하지 않을 것이다. 따라서 신뢰할 수 없는 브랜드의 [[파워서플라이]]의 구입은 반드시 피하고, 보호회로가 충실하게 구성된 제품을 구매한다.[* 가정에 적합한 웬만한 구성으로는 풀로드 130W를 넘을 일이 없으니 정격 300W 이상이면 충분하다. 다만 국내 시장 현실상 정격 300W 파워를 구매하기는 쉽지 않고 대안으로 정격 500W정도면 적절하고 볼 수 있다.] * '''저장장치는 [[SSD]] 혹은 [[USB]] 플래시 드라이브를 권장한다.''' 기본적으로 [[플래시 드라이브]]는 충격에 강하고 랜덤 읽기/쓰기 성능이 [[HDD]]보다 빠르다. 또한 충격에 비교적 강하다. 아주 많은 양의 로그를 저장할 필요가 있을때만 별도의 HDD를 달아 사용하는 것이 현명하다. 로그는 지워져도 시스템에 아무런 문제가 없지만 OS가 설치된 디스크가 손상되면 [[인터넷]]을 사용할 수 없게 되니까. * '''쿨링팬은 꼭 필요한 만큼만 장착한다.''' 보통 공유기를 거실이나 침실에 놓는 경우가 많은데, 쿨링팬이 쓸데없이 많이 달려 있다면 그저 소음과 전력소모만 늘어날 뿐이다. 내부에 먼지가 더 빨리 쌓이는 건 덤. '''CPU 쿨러에 붙어있는 팬 하나, 파워서플라이에 붙어있는 팬 하나면 웬만한 가정집 환경에서는 충분하다.''' 구성품 중에 유난히 발열이 많이 나는 기기가 있다면 그 때 추가로 달아주면 된다. 재력이 되고 큰 부피를 감수할 수 있다면 소음과 먼지 걱정이 적은 무팬 구조도 고려해 보자.[* 이 경우 큼지막한 히트싱크로만 이루어진 CPU쿨러와 DC to DC 파워+DC어댑터 조합으로 주로 구성한다.] * 두번째, 다수의 포트를 가진 이더넷 카드 혹은 여러 장의 이더넷 카드, WIFI AP모드를 지원하는 확장카드[* ipTIME 확장기와 같은 무선 AP를 따로 구입할 수 있고, 이것을 더 권장한다. 이유는 후술.] 등을 구입해야 한다. * ''' 랜카드를 구입하자.''' 여러 장의 카드를 구입할 수도 있고, 포트가 많은 확장카드를 구입할 수도 있다. 2010년대 이후에 출시된 대부분의 메인보드는 기가비트 이더넷을 지원하니 그것을 사용해도 된다. 팁을 주자면, 단일 포트 랜카드의 경우 가격이 저렴하고 PCIe 레인도 적게 잡아먹는다. 이와 대조하여 포트가 많은 랜카드의 경우 가격이 비싸고 PCIe 레인을 많이 잡아먹는다. 하지만 본딩(티밍)을 하드웨어 차원에서 지원하거나 하드웨어 가속 성능이 비교적 뛰어나다. 주의할 점으로 다수의 이더넷 포트가 탑재된 확장카드의 경우 1기가비트 쿼드포트 랜카드는 PCIe 2.0 4레인, 10기가비트 쿼드포트 랜카드는 PCIe 3.0 8레인을 차지한다. 이 이하의 경우에는 다수의 포트를 사용할 경우 병목이 발생할 수도 있다. 자세한 내용은 [[PCI Express]] 참고. * '''[[Wi-Fi]]를 사용하려면 별도의 [[확장 카드]] 또는 무선[[공유기]]를 구입해야 한다.''' 일단 '''무선 AP를 사용할 것을 강력하게 권장한다.''' 시중에서 판매되는 [[Wi-Fi]] 확장카드의 경우 클라이언트일 경우에만 명시된 규격을 지원하고, AP 모드를 전혀 지원하지 않거나 제한적으로 지원하는 경우가 많다. [[퀄컴]] 사의 [[칩셋]]을 제외한 대부분의 칩셋은 AP 모드를 제한적으로만 지원하고, [[퀄컴]] 칩셋은 국내에서 구입하기 어렵다. 직구를 해야하는데, 성능에 비해 가격대도 비싸다. 어찌저찌 구성해 놓는다고 해도, 실사용이 어려울 정도로 느린 경우가 다수 보고되었다. [[https://askubuntu.com/questions/389463/hostapd-is-very-slow-at-5mbps|#1]] [[https://unix.stackexchange.com/questions/375716/slow-download-link-with-hostapd-and-ath9k-htc-driver|#2]] '''무선공유기를 별도로 구입 또는 원래 사용하던 공유기를 AP모드로 전환하여 사용하면 이러한 수고를 덜어준다.''' 국내에서 구하기도 쉽고 성능이 좋은 칩셋을 탑재한 AP도 차고 넘친다. * 세번째, 케이스(외관) 선택하기 * '''[[케이스]]를 선택하자.''' 소프트웨어 라우터를 구성한 뒤, 기존 공유기가 있던 자리에 자연스럽게 배치되려면 외관이 중요하다. [[케이스]]는 LP를 사용해도 된다. 대부분의 네트워크 관련 확장카드는 LP 브라켓을 기본 구성품으로 주고, LP 케이스에 무리없이 들어간다. LP 케이스의 폭과 2U짜리 랙[* 2U 랙 케이스 경우 LP케이스처럼 LP사이즈 PCIe만 호환되기 때문에 랜카드나 그래픽카드를 구입하기 전에 LP에 호환이 되는지 확인해야한다.]의 폭이 같기 때문에 2U짜리 서버 케이스를 사용해도 된다. 단, 주변 환경과의 조화를 고려한다면 [[HTPC]] 케이스가 적절할 것이다. * 네번째, [[하드웨어]]가 완성되었다면 이제 [[소프트웨어]] 차례다. * '''적절한 [[운영 체제]] 준비하기''' 라우팅에 특화된 운영 체제가 있다. 기성품 공유기처럼 쉽게 사용할 수 있기 때문에 일반적인 가정용으로 알맞다. 그 외에 대중적으로는 [[리눅스]]가 많이 사용되고, 권장된다. [[윈도우]]에 비해 아주 가볍고 [[오픈소스]]이기 때문에 관련 정보와 프로그램이 많고, 대중적으로 많이 사용되므로 문제가 발생했을 때 [[구글링]]으로 문제를 해결할 수 있다. === 시스템 빌드하기 === 어느 컴퓨터나 마찬가지로, 완제품을 구입하는 것이 아니라면 시스템을 직접 조립해야 한다. 자세한 내용은 [[조립 컴퓨터/팁#s-3]] 문서를 참고하기 바란다. === 운영 체제 구성하기 === ==== 가장 쉬운 방법: 라우팅 전용 OS 설치하기 ==== OpenWRT나 RouterOS와 같은 라우팅에 최적화된 OS를 설치하는 방법이 있다. 복잡한 설정을 건들이기 귀찮고, GUI가 필요하거나, 이제 막 시작하려는 경우 추천된다. 주로 다음과 같은 라우팅OS를 보편적으로 사용한다. * [[Mikrotik]] RouterOS: 방화벽성능을 제외하고 소프트웨어 라우터에서는 이쪽이 본좌. 설치와 설정이 까다로운 대신 세세한 부분까지 설정할 수 있고 그래픽 사용자 환경도 지원한다(물론 터미널이 더 자세한 설정을 할 수 있다.) 무심한듯 시크하게 라우터OS안의 메타라우터에다가 OpenWRT같은걸 올려버릴 수 있다. 시스코처럼 자격증 시험도 있다. 기본적으로 라이센스 키를 구매해야 쓸 수 있지만, 기능 체험이 가능하도록 데모 라이센스는 무료로 제공된다. 유료버전은 45달러부터 시작. 자세한 내용은 [[https://wiki.mikrotik.com/wiki/Manual:License|미크로틱 위키 항목]]을 참조하자. * [[http://www.brocade.com/launch/vyatta/|Vyatta]]: 현재 Brocade 에 팔려서 오픈소스 버전은 [[VyOS]]로 바뀌었다. [[데비안]] 기반의 라우터인데, GUI는 없다. 하지만 성능이 상당히 좋은 편이라 상당히 쓸만하다. * [[OpenWRT]]: [[https://openwrt.org/|홈페이지]]: 링크시스 공유기의 GPL 코드를 기반으로 만들어진 커스텀 펌웨어가 그 시초이다. LuCI라는 패키지를 이용하면 그럴듯한 웹 GUI인터페이스도 쓸 수 있다. 애초에 임베디드 기기용으로 나와서 CPU지원이 다양해서 여러 임베디드 기기들에 설치된다. 터미널을 열 수도 있지만 태생이 CPE router용으로 나온지라 만질 수 있는 설정이 다양한 편은 아니다. 완전 무료. * [[https://www.pfsense.org/|pfSense]]: freeBSD기반, 원래는 방화벽인데 방화벽기능은 약하지만 가벼워서 사양이 낮은 하드웨어에서도 비교적 throughput이 잘나온다. 완전 무료. * [[https://bsdrp.net|BSDRP]]: freeBSD기반, pfsense가 방화벽인데 반해 이 물건은 오로지 라우팅을 위한 배포판이다. 사양도 낮고 thoughput도 아주 잘나오지만, 일반 사용자용으로 개발된게 아니라 기업용 네트워크 등을 목표한 물건이라 별도의 관리용 web ui따윌 전혀 지원하질 않는다. 완전 무료. * [[http://www.sophos.com/en-us/products/free-tools/sophos-utm-home-edition.aspx|Sophos]]: 리눅스 커널 사용, 원래는 Astro방화벽이었는데 소포스로 이름을 바꾸었다. 애초에 UTM 솔루션을 상정하고 개발된 물건이라 가장 방화벽 성능이 좋다. 50클라이언트는 무료로 가정집정도의 환경에는 충분히 무료로 쓸 수 있다. * [[https://www.untangle.com/|Untangle]]: 데비안 기반, 설치와 설정이 간편하고 UI가 사용자친화적이다. 웹사이트 필터링 애플리케이션등 몇몇 기능은 유료지만 무료기능만으로도 충분히 사용 가능하다. 가장 무난하다. 방화벽 성능도, 라우팅성능도. [include(틀:문서 가져옴, this=문단, title=라우터, version=103, paragraph=5)] ==== 리눅스 배포판을 사용하는 방법 ==== 조금 더 세부적인 설정을 할 수 있고, 필요한 경우 관련 프로그램을 직접 빌드해 적용할 수도 있다. 특히 배포판을 사용하는 경우에는 보안 업데이트를 자동화할 수 있다는 장점도 있다. 단, 라우팅 전용으로 설계된 OS가 아닐 경우 굳이 필요하지 않은 프로그램이 설치되어 시스템 리소스를 점유할 수 있으니 이를 참고해야 한다. 참고: 먼저 내부 네트워크가 어떠한 방식으로 작동하는지에 대해 이해할 필요가 있습니다. 자세한 내용은 [[TCP/IP]], [[NAT]], [[DHCP]] 문서를 참고하시기 바랍니다. > '''우분투 20.04 서버 기준으로 설명합니다. 배포판에 따라 추가적인 설정이 필요할 수 있습니다.''' 네트워크를 구성하는 일은 어렵지 않다. [[DHCP]] 서버를 구성하고 [[NAT]]를 가능케 하면 된다. ===== 네트워크 인터페이스 설정하기 ===== 먼저 두 개의 인터페이스를 설치해야 한다. 필요한 경우 아래 명령어로 드라이버를 설치하자. {{{#!folding [터미널 명령 열기/접기] > root@system:~# '''apt install -y ubuntu-drivers-common''' > Reading package lists... Done > Building dependency tree > Reading state information... Done > (... ...) > root@system:~# '''ubuntu-drivers autoinstall''' > (... ...)}}} 그 다음 아래 명령어를 입력해 인터페이스가 재대로 설치되었는지 확인하자. '''여기에서는 enp1이 업링크(WAN), enp2가 다운링크(LAN)인 것을 예시로 한다.''' {{{#!folding [터미널 명령 열기/접기] > root@system:~# '''ifconfig -a''' > '''enp1s0''': flags=4163<UP,BROADCAST,MULTICAST> mtu 1500 > (... ...) > '''enp1s1''': flags=4163<UP,BROADCAST,MULTICAST> mtu 1500 > (... ...) > '''enp2s0''': flags=4163<UP,BROADCAST,MULTICAST> mtu 1500 > (... ...) > '''enp2s1''': flags=4163<UP,BROADCAST,MULTICAST> mtu 1500 > (... ...) > lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 > (... ...)}}} 위에 강조된 인터페이스 이름은 '''eth0''', '''eth1'''과 같이 나타날 수도 있으며, 이는 정상이다.[* enpXsY와 같이 표시되는 경우는 메인보드에서 랜카드가 설치된 슬룻 번호 X와 포트 번호 Y로 이름을 변경한 경우이며 GRUB 부트로더에서 이를 비활성화할 수 있다.] 참고: 리눅스는 기본적으로 라우팅 테이블을 설정해 주어야 하는데, 이는 수동으로 설정해줄 수도 있지만 네트워크 설정을 통해 자동적으로 설정되므로 굳이 설정해줄 필요는 없다. 우분투 18.04 이상 버전에서는 netplan을 통해 네트워크를 관리할 수 있고, 기존 networkd보다 훨씬 더 쉽고 간단하기 때문에 이를 그대로 사용할 것을 권장한다. 아래 명령어를 통해 설정 파일을 수정할 수 있다. {{{#!folding [터미널 명령 열기/접기] > root@system:~# '''ls /etc/netplan''' > 50-cloud-init.yaml[* 이 파일의 이름은 설치 방법에 따라 다르게 표시될 수 있다.] > root@system:~# '''vi /etc/netplan/50-cloud-init.yaml'''[* vi 대신 nano와 같은 다른 편집기를 사용해도 된다.]}}} 아래와 같이 설정한다. (yaml) {{{#!folding [설정 방법 열기/접기] ||network: ethernets: enp1s0: dhcp4: false dhcp6: false ''# dhcp4/6 (boolean) 값을 변경해 그 인터페이스에서 dhcp 클라이언트가'' ''# 작동할지 설정할 수 있다.'' optional: true ''# optional (boolean) 값이 true 이면 부팅 시 이 인터페이스가 '' ''# 구성되어 있지 않더라도 부팅을 잠시 중지하지 않는다.'' enp1s1: optional: true enp2s0: optional: true enp2s1: optional: true bridges: lan0: dhcp4: false dhcp6: false addresses: [192.168.254.1/24] ''# 할당받을 ip를 입력한다. (dhcp 설정과 충돌하면 안 된다.)'' ''# /24는 255.255.255.0 을 의미한다.'' interfaces: - 'enp1s0' - 'enp1s1' ''# 어떠한 인터페이스가 브릿지에 구성될지 설정한다.'' wan0: ''# 인터페이스를 한개만 사용하므로 굳이 브릿지를 설정하지 않아도 되나, 추후'' ''# 설정에서 구분하기 쉬우므로 이와 같이 설정한다.'' dhcp4: true dhcp6: false nameservers: addresses: - 8.8.8.8 - 8.8.4.4 ''# 사용할 dns 서버 주소를 설정한다. ipv6 dhcp 서버를 활성화하면'' ''# ipv6 주소를 사용해도 된다.'' interfaces: - 'enp2s0' wan1: dhcp4: true dhcp6: false nameservers: addresses: - 8.8.8.8 - 8.8.4.4 interfaces: - 'enp2s1'||}}} 위 설정은 취향/목적에 따라 변경해도 된다. 단, 아래에서 설명하는 방법과 다르게 적용해야 할 수도 있으니 신중하게 수정하길 바란다. 다음 명령어를 입력해 netplan 설정을 적용한다. > root@system:~# '''netplan apply''' 이제 네트워크 인터페이스가 정의되고 설정할 수 있게 되었다.[* 이 단계에서는 아직 다운링크를 통해 인터넷을 사용할 수는 없다.] * wan0과 wan1은 브릿지이며 업링크이다. 통신사 모뎀이나 아파트 벽면 단자와 연결하면 된다. * lan0은 브릿지이며 다운링크이다. 컴퓨터나 스위치(허브)와 연결해 사용하면 된다. 인터페이스가 어떻게 정의되었는지 확인하려면 ifconfig를 사용하자. {{{#!folding [터미널 명령 열기/접기] > root@system:~# '''ifconfig -a''' > '''wan0''': flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 > inet 203.0.113.35[* IPv4 TEST-NET-3 IP 주소이며, 실제로 이 IP를 할당받는 일은 없다.] netmask 255.255.255.0 broadcast 203.0.113.255[* 만약 이 줄이 보이지 않는다면 enp1s0 인터페이스에 재대로 연결되었는지 확인하자. 그래도 안된다면 시스템을 재부팅하자.] > (... ...) > '''wan1''': flags=4163<UP,BROADCAST,MULTICAST> mtu 1500 > (... ...) > '''lan0''': flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 > (... ...) > '''enp1s0''': flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 > (... ...) > '''enp1s1''': flags=4163<UP,BROADCAST,MULTICAST> mtu 1500 > (... ...) > '''enp2s0''': flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 > (... ...) > '''enp2s1''': flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 > (... ...) > '''lo''': flags=73<UP,LOOPBACK,RUNNING> mtu 65536 > (... ...)}}} 다음 명령어를 사용해 인터넷이 되는지 확인하자. > root@system:~# '''ping google.com -c3''' 만약 인터넷에 재대로 연결되지 않은 것 같다면 시스템을 재부팅하거나, 잘못된 설정이 없는지 확인하기 바란다. ===== DHCP 데몬 (서버) 설치하기 ===== 패키지 관리자를 통해 isc-dhcp-server를 먼저 설치해야 한다.[* 원한다면 udhcpd나 dnsmasq를 사용해도 된다.] {{{#!folding [터미널 명령 열기/접기] > root@system:~# '''apt install -y isc-dhcp-server''' > Reading package lists... Done > Building dependency tree > Reading state information... Done > (... ...)}}} 그 다음 /etc/dhcp/dhcpd.conf 파일을 수정해 설정을 변경하자. {{{#!folding [터미널 명령 열기/접기] > root@system:~# '''cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.backup''' > root@system:~# '''rm /etc/dhcp/dhcpd.conf'''[* 기존 파일을 제거한다. 주석처리된 예시가 들어있으므로 원한다면 먼저 확인해봐도 좋다.] > root@system:~# '''vi /etc/dhcp/dhcpd.conf'''}}} 다음과 같이 설정하면 된다. {{{#!folding [설정 방법 열기/접기] ||# 전역 설정을 할 수 있다. option domain-name "Software_Router"; option domain-name-servers 8.8.8.8, 8.8.4.4; default-lease-time 172800; max-lease-time 864000; # dhcp 리스 타임을 변경할 수 있다. subnet 192.168.254.0 netmask 255.255.255.0 { # dhcp 서버가 작동할 인터페이스 이름 # 반드시 이 인터페이스의 dhcp 클라이언트는 비활성화 해야 한다. interface "lan0"; # 네트워크 대역 설정 option routers 192.168.254.1; # 라우터의 내부 ip를 설정한다. option subnet-mask 255.255.255.0; # 서브넷 마스크를 설정한다. option broadcast-address 192.168.254.255; # 브로드캐스트 ip를 설정한다. range 192.168.254.100 192.168.254.200; # ip 할당 범위를 설정한다. # 고정 아이피 host system1 { hardware ethernet 11:11:22:22:33:3f; fixed-address 192.168.254.10; } }|| }}} 설정을 저장했다면 서비스를 다시 시작하자.[* service is masked. 가 발생할 경우 '''systemctl unmask isc-dhcp-server''' 를 입력하고 다시 시도하면 된다.] > root@system:~# '''service isc-dhcp-server restart''' 이제 lan0 브릿지에 연결된 인터페이스에 사설 ip가 할당받을 수 있다. ===== 방화벽 구성하기 ===== 리눅스에서는 netfilter를 기본 방화벽으로 사용하고 iptables를 통해 제어할 수 있다. 먼저 /etc/sysctl.conf 파일을 수정해 다른 인터페이스에서 인터넷에 접속할 수 있게 해야 한다. {{{#!folding [터미널 명령 열기/접기] > root@system:~# '''cp /etc/sysctl.conf /etc/sysctl.conf.backup''' > root@system:~# '''rm /etc/sysctl.conf''' > root@system:~# '''touch /etc/sysctl.conf''' > root@system:~# '''chmod 700 /etc/sysctl.conf''' > root@system:~# '''echo "net.ipv4.ip_forward=1" > /etc/sysctl.conf''' > root@system:~# '''sysctl -p'''}}} 그 다음은 iptables를 통해 방화벽을 설정해야 한다. {{{#!folding [터미널 명령 열기/접기] > root@system:~# '''iptables -P INPUT DROP''' > root@system:~# '''iptables -P OUTPUT ACCEPT''' > root@system:~# '''iptables -P FORWARD ACCEPT''' > root@system:~# '''iptables -t nat -A POSTROUTING -s 192.168.254.0/24 -o wan0 -j MASQUERADE''' > root@system:~# '''iptables -t nat -A POSTROUTING -s 192.168.254.0/24 -o wan0 -j MASQUERADE''' > root@system:~# '''iptables -t nat -A POSTROUTING -s 192.168.254.0/24 -o wan1 -j MASQUERADE''' > root@system:~# '''iptables -A INPUT -m conntrack --ctstate INVALID -j DROP''' > root@system:~# '''iptables -A INPUT -i lo -j ACCEPT''' > root@system:~# '''iptables -I INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT''' > root@system:~# '''iptables -I INPUT -i wan0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT''' > root@system:~# '''iptables -I INPUT -i wan1 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT''' > root@system:~# '''iptables -A FORWARD -i wan0 -o lan0 -m conntrack --ctstate INVALID -j DROP''' > root@system:~# '''iptables -A FORWARD -i wan1 -o lan0 -m conntrack --ctstate INVALID -j DROP''' > root@system:~# '''iptables-save > /etc/iptables/iptables.rules'''}}} 이제는 다운링크 인터페이스(lan0)에 연결된 PC에서 인터넷을 사용할 수 있다. 주의: iptables 설정은 재부팅 시 초기화되므로 자동으로 설정할 수 있게 만들어줘야 한다. 여기에서는 rc 스크립트를 사용하는 방법에 대해 다룬다. 활성화 방법 [[http://hjnote.com/?p=20|#]] rc 스크립트를 사용할 수 있게 했다면 다음 명령어를 입력해 /etc/rc.local 파일을 수정하자. > root@system:~# '''vi /etc/rc.local''' 다음과 같이 설정하자. {{{#!folding [설정 방법 열기/접기] ||#!bin/bash iptables-restore < /etc/iptables/iptables.rules exit 0|| }}} 이제 완전히 끝났다. 재부팅 시 설정은 자동으로 다시 적용되며, 인터넷 또한 사용할 수 있다. 만약 WIFI AP까지 설정해야 할 경우에는 다음 문단으로 넘어가면 된다. ====== 부록1: 포트 포워딩 ====== 다음과 같이 입력하면 외부(wan0 또는 wan1)로 부터 오는 특정 포트의 패킷을 lan0에 연결된 내부 PC로 넘겨줄 수 있다. {{{#!folding [터미널 명령 열기/접기] > root@system:~# '''iptables -t nat -I POSTROUTING -i wan0 -p tcp -m tcp --dport 25565 -j DNAT --to-destination 192.168.254.10:25565'''[* 물론 목적지 포트와 출발지 포트가 다르게 하는 것도 가능하다.] > root@system:~# '''iptables-save > /etc/iptables/iptables.rules'''}}} 단, 이렇게만 설정하면 내부 PC에서 외부 인터페이스 주소(wan0의 공인아이피)를 입력했을 때 재대로 통신이 되지 않고 곧장 라우터로 연결된다. 다음 명령어로 해결 가능하다. {{{#!folding [터미널 명령 열기/접기] > root@system:~# '''iptables -t nat -I PREROUTING -d 203.0.113.35[*주의 여기에는 라우터가 할당받은(wan0을 열었다면 wan0에 할당된) ip를 입력해야 한다.)]/32 -p tcp -m tcp --dport 25565 -j DNAT --to-destination 192.168.254.10:25565''' > root@system:~# '''iptables -t nat -I POSTROUTING -s 192.168.254.0/24 -d 192.168.254.10/32 -o lan0 -p tcp -m tcp --dport 25565 -j SNAT --to-source 192.168.254.1''' > root@system:~# '''iptables-save > /etc/iptables/iptables.rules'''}}} 취소선 처리가 된 부분은 편집을 눌러 복사해 주시기 바랍니다. ===== WIFI AP 설정하기[* 소프트웨어 라우터에 WIFI 카드를 설치했을 경우에만 설정하면 된다.] ===== === 팁 === == 여담 == [[알리익스프레스]] 등지에서 중국의 수많은 중소기업에서 제작한 완제품 소프트웨어 라우터를 팔고 있다. 부피와 전력소모를 줄이기 위해 노트북용 CPU를 사용하고 랜포트를 4개 이상 달아놓은 경우가 대부분이다. 추가확장을 포기한 대신 크기가 기성품 공유기 수준으로 작고 DC 전원을 사용해서 전원 연결하기가 간편하다는 장점이 있다. 이런 제품을 구입하고 라우팅 특화 OS를 설치하면 직접 조립한 소프트웨어 라우터와 동일한 기능을 한다. 다만 '''[[중국|기업 국적이 국적이니만큼]]''' 하드웨어 백도어 같은 의도치 않은 문제가 생길수 있으니 그닥 추천되지는 않는다. [[노트북]]에 [[USB]] 3.0 포트가 많이 달려 있다면, 해당 포트마다 기가비트 USB 랜 어댑터를 달아서 운용할수도 있다. 이렇게 만들면 외관이 보통 지저분한게 아니지만, 화면을 여는 것만으로 많은 공간 차지 없이 모니터와 키보드가 달린 환경을 쉽게 마련할 수 있다는 장점이 있다. 필요에 따라 밖으로 쉽게 들고가서 유선랜 인프라가 있을때 좁은 범위 내에 간이 와이파이존을 만들어주는건 덤. 모뎀은 해당되지 않아서 의미는 없지만, 배터리가 멀쩡하다면 UPS처럼 정전시에도 잘 작동한다. == 관련 문서 == * [[10기가비트 이더넷]] * [[10기가 인터넷]] * [[데스크탑]] * [[라우터]] * [[랜카드]] * [[리눅스]] * [[인터넷 공유기]] * [[컴퓨터]] * [[VPN]] [[분류:네트워크]][[분류:컴퓨터]]