NATD(8)

명칭
natd - 네트워크 어드레스 변환 demon

서식
natd [-unregistered_only | -u] [-log | -l] [-proxy_only] [-reverse] [-deny_incoming | -d] [-use_sockets | -s] [-same_ports | -m] [-verbose | -v] [-dynamic] [-in_port | -i port] [-out_port | -o port] [-port | -p port] [-alias_address | -a address] [-target_address | -t address] [-interface | -n interface] [-proxy_rule proxyspec] [-redirect_port linkspec] [-redirect_proto linkspec] [-redirect_address linkspec] [-config | -f configfile] [-log_denied] [-log_facility facility_name] [-punch_fw firewall_range] [-log_ipfw_denied]

해설
natd 유틸리티는, FreeBSD 에 있어서의 divert(4) 소켓과 함께 이용하는 것에 의해, 네트워크 주소의 변환을 실시합니다. 이 프로그램은, 복수의 NIC 와 함께 사용하는 것을 의도하고 있습니다 - PPP 링크상에서 NAT 를 실시하고 싶은 경우, ppp(8) 의 -nat 스윗치를 사용해 주세요.

natd 유틸리티는 통상, demon로서 백그라운드에서 실행합니다. natd (은)는 머신에 들어 오는 패킷, 또는 머신으로부터 나가는 패킷을 생 (raw)인 채 취급해, 경우에 의해 IP 패킷 스트림에 다시 배웅하기 전에 손봅니다.

natd (은)는 다른 호스트로 향하는 모든 패킷에 대해, 발신기지 IP 주소를 현재의 머신의 것으로 한다, 라고 하는 변환을 실시합니다. 이와 같이 변환된 각 패킷에 대해, 변환 내용을 기록하기 위해서 내부 테이블 엔트리가 작성됩니다. 발신기지 포트 번호도, 패킷에 적용한 테이블 엔트리를 나타내도록(듯이) 변경됩니다. 현재의 호스트의, 대상이 되는 IP 주소를 사용한 패킷이 수신되면(자), 이 내부 테이블이 체크됩니다. 엔트리가 발견되면(자), 패킷에 올바른 대상 IP 주소와 포트 번호를 넣는데 이용됩니다.

이하의 명령행 옵션을 이용할 수 있습니다.

-log | -l
    여러가지 앨리어스(alias)의 통계나 정보를 파일 /var/log/alias.log 에 기록합니다. 이 파일은 natd 하지만 기동될 때마다 잘라 채울 수 있습니다.

-deny_incoming | -d
    입력 패킷 가운데, 내부 변환 테이블에 엔트리가 없는 것을 건네주지 않습니다.

    본옵션을 사용하지 않으면 이러한 패킷은 아래와 같은 -target_address 룰을 사용해 변경되어 내부 변환 테이블에 엔트리가 작성됩니다.

-log_denied
    거부한 입력 패킷을 syslog(3) (을)를 개입시켜 로그 합니다 ( -log_facility (을)를 참조해 주세요).

-log_facility facility_name
    syslog(3) (을)를 개입시켜 정보를 로그 할 경우에, 지정한 로그 퍼실리티를 사용합니다. 인수 facility_name 하 syslog.conf(5) 에 기술되고 있는 키워드 중 하나입니다.

-use_sockets | -s
    FTP data connection나 IRC DCC send connection를 확립하는데 socket(2) (을)를 할당합니다. 이 옵션은 보다 system resource를 소비합니다만, 포트 번호가 충돌하는 경우에서도 connection가 성공하는 것을 프로텍션합니다.

-same_ports | -m
    나가는 패킷을 변환할 때에, 가능한 한 포트 번호를 같은 유지하도록(듯이) 합니다. 이 옵션에 의해, RPC 와 같은 프로토콜이 잘 일할 가능성이 오릅니다. 포트 번호를 유지할 수가 없을 때로는, 암묵중에 통상과 같은 방법으로 변환됩니다.

-verbose | -v
    기동시에 daemon(3) (을)를 호출하지 않습니다. 따라서, 제어 단말로부터 떼어내지고 하지않고서, 표준 출력에 모든 패킷 변환을 표시합니다. 이 옵션은 디버그의 목적으로 마셔 이용해야 합니다.

-unregistered_only | -u
    등록되지 않았다 발신기지 주소를 수반하는 나가는 패킷만을 변환합니다. RFC 1918 에 의하면, 등록되지 않은 발신기지 주소는 10.0. 0.0/8 으로 172.16. 0.0/12 로 192.168. 0.0/16 이 되고 있습니다.

-redirect_port proto
    targetIP: targetPORT[-targetPORT] [aliasIP:] aliasPORT[-aliasPORT] [remoteIP[: remotePORT[-remotePORT]]] 지정된 포트에 들어 오는 connection를 다른 호스트와 포토에 리디렉트 합니다. 인수 proto 에는 tcp 또는 udp (을)를 지정합니다. targetIP (은)는 전송처의 IP 번호, targetPORT (은)는 같이 전송처 포트 번호 (범위 지정 가능), aliasPORT (은)는 접속을 받아들이는 포트 번호 (범위 지정 가능), aliasIP (은)는 같이 접속을 받아들이는 주소입니다. 필요에 따라서 remoteIP (와)과 remotePORT (을)를 지정해, 접속원을 한정할 수가 있습니다. targetPORT (와)과 aliasPORT (은)는, 그러한 차지하는 번호는 차이가 나도 상관하지 않습니다만, 범위의 크기는 같은 필요가 있습니다. remotePORT 의 지정을 생략 했을 경우, 전포트 번호가 지정된 것으로 여겨집니다. remotePORT (을)를 지정할 때는, 그 범위의 크기를 targetPORT (와)과 같게 하든가, 혹은 0 (전포트 번호)을 지정할 필요가 있습니다. 예를 들면,

        tcp inside1:telnet 6666

    그렇다고 하는 인수는, 이 머신의 포트 6666 으로 향해진 tcp 패킷이 머신 inside1 의 telnet 포트에 보내지는 것을 나타내고 있습니다.

        tcp inside2:2300-2399 3300-3399

    (은)는, 포트 3300-3399 로 향해진 입력 connection를 호스트 inside2 의 포트 2300-2399 에 리디렉트 합니다. 매핑은, 포트 3300 은 2300 에 3301 은 2301 에와 같이 1대 1으로 행해집니다.

-redirect_proto proto localIP [
    publicIP [remoteIP]] publicIP (으)로 향해진 프로토콜 proto ( protocols(5) (을)를 참조) 의 입력 IP 패킷을, localIP 주소에 리디렉트 해, 그 역도 실시합니다.

    publicIP 하지만 지정되지 않으면 디폴트의 앨리어스(alias) 주소가 사용됩니다. remoteIP 하지만 지정되면(자), remoteIP (으)로부터/에 향하여 도착한 패킷만이 룰에 매치 합니다.

-redirect_address localIP publicIP
    공식적인 IP 주소에의 패킷의 흐름을, 로컬 네트워크내의 머신에 리디렉트 합니다. 이 기능은 정적 NAT (static NAT) (와)과 불리고 있습니다. 정적 NAT 는 당신의 ISP 가 IP 주소의 작은 블록을 당신에게 할당했을 때에, 단일의 주소로서 이용하는데도 이용할 수 있습니다:

    redirect_address 10.0. 0.8 0.0. 0.0

    상기의 명령은 들어가 그을린 패킷을 머신 10.0. 0.8 에 리디렉트 합니다.

    아래와 같이, 몇개의 주소 앨리어스(alias)가 동일한 공식 주소를 가리키도록(듯이) 지정하면(자),

        redirect_address 192.168. 0.2 public_addr
        redirect_address 192.168. 0.3 public_addr
        redirect_address 192.168. 0.4 public_addr

    들어 오는 패킷의 흐름은 마지막에 변환된 로컬 주소 (192.168. 0.4)로 향해집니다만, 최초의 두 개의 주소에의 출력 패킷의 흐름은, 지정되었다 public_addr (으)로부터의 앨리어스(alias)대로 됩니다.

-redirect_port proto
    targetIP: targetPORT[, targetIP: targetPORT[, ...]] [aliasIP:] aliasPORT [remoteIP [:remotePORT]]

-redirect_address
    localIP[, localIP[, ...]] publicIP 서식 -redirect_port 및 -redirect_address (은)는, 단일 서버의 네트워크 부하를 off-road 해, 부하를 서버 풀에 분산합니다. 이 기능은 LSNAT (RFC 2391)(으)로서 알려져 있습니다. 예를 들면, 인수

        tcp www1:http, www2:http, www3:http www:http

    (은)는, 호스트 www 에의 입력 HTTP 요구를, www1, www2, www3 의 어느쪽이든에, 투과적으로 리디렉트 합니다. 여기서, 호스트의 선택은, 넷의 부하에 관계없이, 단순하게 라운드로빈으로 행해집니다.

-dynamic
    -n 옵션이나 -interface 옵션이 이용되면(자), natd 하 지정되었다 interface 에 루팅 하는 변환 소켓을 감시합니다. 인터페이스의 IP 주소가 변화하면(자), natd (은)는 앨리어스(alias) 주소를 동적으로 변경합니다.

-in_port | -i port
    모든 패킷을 “입력” (으)로서 취급해, divert(4) 포트 port (으)로부터 읽기 port 에 써냅니다.

-out_port | -o port
    모든 패킷을 “출력” (으)로서 취급해, divert(4) 포트 port (으)로부터 읽어들여, port 에 써냅니다.

-port | -p port
    divert(4) 에 의해 지정된 룰을 이용해 패킷을 식별해, “입력” 패킷을 divert(4) 포트 port (으)로부터 읽어, “출력” 패킷을 port 에 써냅니다. port 하지만 숫자가 아닌 경우, 데이타베이스가 검색됩니다. 이 플래그가 지정되지 않을 때로는, 디폴트로서 natd (이)라는 이름의 divert 포트가 이용됩니다.

-alias_address | -a address
    앨리어스(alias) 주소로서 address (을)를 이용합니다. 이 옵션이 지정되지 않는 경우는, -n 옵션인가 -interface 옵션이 지정되지 않으면 안됩니다. 지정된 주소는, “공개되었다” 네트워크 인터페이스에 할당주소이다 필요가 있습니다.

    출력된다 전데이터의 소스 주소는 address 에 갱신. 도착한다 전데이터는, 이미 앨리어스(alias) 된 외국용 접속에 매치 하는지 어떤지 체크됩니다. 매치 하는 경우, 패킷은 각각 변환됩니다. 매치 하지 않는 경우, -redirect_port, -redirect_proto, -redirect_address 의 할당을 체크해 각각의 동작을 실시합니다. 다른 동작을 실시할 수 없는 경우 한편 -deny_incoming 하지만 지정되어 있지 않은 경우, 후술의 -target_address 옵션으로 지정된 대로, 이 패킷은 로컬의 머신에 배송됩니다.

-t | -target_address address
    대상 주소를 설정합니다. 기존의 링크와는 관련지을 수 있지 않은 입력 패킷이 호스트 머신에 도착했을 때, 그 패킷은 지정되었다 address 에 보내집니다.

    대상 주소는 255.255. 255.255 (으)로 설정 가능합니다. 이 경우, 모든 신규 입력 패킷은, -alias_address 또는 -interface 그리고 설정되는 앨리어스(alias) 주소에 갑니다.

    이 옵션을 사용하지 않는 경우, 또는 인수 0.0. 0.0 그리고 불렸을 경우, 모든 신규 입력 패킷은 패킷중에서 지정되는 주소에 갑니다. 이것에 의해, 패킷의 경로가 가능한 경우에는, 외부의 머신이 내부의 머신과 직접 통신 가능하게 됩니다.

-interface | -n interface
    앨리어스(alias) 주소를 결정하는데, interface (을)를 이용합니다. interface 에 관련 지을 수 있었던 IP 주소가 변화할 가능성이 있는 경우에는, -dynamic 옵션도 지정되어야 합니다. 이 옵션이 지정되지 않는 경우, -alias_address 옵션을 사용할 필요가 있습니다.

    지정되었다 interface (은)는, 통상, “공개되었다” (또는 “외부” 의) 네트워크 인터페이스입니다.

-config | -f file
    file (으)로부터 설정을 읽어들입니다. file (은)는 옵션의 리스트를 포함해, 상기의 코맨드 라인 플랙의 긴 표기와 같은 물건이 1 행씩 들어갑니다. 예를 들면,

        alias_address 158.152. 17.1

    그렇다고 하는 행은 앨리어스(alias) 주소에 158.152. 17.1 을 지정합니다. 설정 파일내에서는, 인수를 가지지 않는 옵션은 yes 인가 no (을)를 따라 지정됩니다. 예를 들면,

        log yes

    하 -log (와)과 같은 의미가 됩니다.

    후속 하는 공백과 공행은 무시됩니다. ‘#’ 기호는, 행의 나머지가 코멘트인 표입니다.

-reverse
    이 옵션을 지정하면(자) natd 하 “입력” 패킷과 “출력” 패킷을 반대로 취급해, “외부” 인터페이스대신에 “내부” 인터페이스상에서 동작합니다.

    출력 트래픽이 로컬 머신에 리디렉트 되어 natd 하지만 입력 인터페이스로 주행하고 있다 (통상은 출력 인터페이스로 주행합니다) 그렇다고 한, 투과 프록시를 실행하고 있는 상황으로 유용한 경우가 있습니다.

-proxy_only
    natd 하지만 투과 프록시만을 실행하도록(듯이) 강제합니다. 통상의 어드레스 변환은 실행되지 않습니다.

-proxy_rule
    [type encode_ip_hdr | encode_tcp_stream] port xxxx server a.b.c.d:yyyy 투과 프록시를 유효하게 합니다. 지정한 포트의 패킷으로 이 호스트로부터 다른 호스트로 향하는 출력 TCP 패킷은, 지정한 서버의 포트에 리디렉트 됩니다. 옵션으로서 원의 행선지 주소가 패킷에 encode 됩니다. encode_ip_hdr (은)는, 이 정보를 IP 옵션필드에 둡니다. encode_tcp_stream (은)는, 이 데이터를 TCP 스트림의 선두에 삽입합니다.

-punch_fw
    basenumber:count 이 옵션은, FTP/IRC DCC connection용으로, ipfirewall(4) 베이스의 파이어 월(fire wall)에 구멍을 뚫도록, natd 에 지시합니다. 이것은, 특정의 connection (이 connection만)의 파이어 월(fire wall)가 빠져 나가고를 허락한다고 하는, 일시적인 파이어 월(fire wall) 룰을, 동적으로 인스톨 하는 것으로 실현됩니다. 이 룰은, 대응하는 connection가 종료하면(자), 자동적으로 삭제됩니다.

    basenumber (으)로부터 개시하는 최대 count 개의 룰이 사용되어 파이어 월(fire wall)에 구멍을 뚫습니다. 모든 룰에 대한 범위는, 기동시에 클리어 됩니다.

-log_ipfw_denied
    ipfw(8) 룰이 블록 한 것에 의해, 패킷이 재삽입할 수 없었을 때에, 로그 합니다. -verbose 부착의 경우는, 이것이 디폴트입니다.

NATD 의 실행
natd (을)를 달리게 하려고 하기 전에는 이하의 순서가 필요합니다:

1.  자신의 커널을 이하의 옵션을 붙여 구축합니다:

        options IPFIREWALL
        options IPDIVERT

    자신의 커널을 구축하는 방법에 대해서는, 핸드북에 자세한 설명이 어느 그 쪽을 참조해 주세요.

2.  당신의 머신이 게이트웨이로서 일하도록(듯이) 합니다. 이것은 /etc/rc.conf 에

        gateway_enable=YES

    (와)과 지정하는지,

        sysctl net.inet.ip.forwarding=1

    그렇다고 하는 명령을 이용하는 것으로 기능하게 됩니다.

3.  -interface 옵션을 사용하고 싶은 경우는, 그 인터페이스가 벌써 설정이 끝난 상태가 되도록(듯이) 합니다. 예를 들면, interface (으)로서 ‘tun0’ (을)를 지정하려고 해, 그 인터페이스로 ppp(8) (을)를 사용하고 있는 경우에는, natd (을)를 기동하기 전에 ppp (을)를 기동하도록(듯이) 하지 않으면 안됩니다.

natd 의 실행은 극히 간단합니다.

    natd -interface ed0

그렇다고 하는 행으로 대부분의 경우 충분합니다 (올바른 인터페이스명에 옮겨놓아 주세요). 부트시에 자동적으로 개시하도록(듯이) 설정하는 방법에 대해서는 rc.conf(5) (을)를 참조해 주세요. natd 하지만 기동되면(자), 패킷의 흐름의 방향이 natd (분)편에 바뀐다 (divert 되는 것) 같게 하지 않으면 안됩니다:

1.  /etc/rc.firewall 스크립트를 잘 조정할 필요가 있습니다. 파이어 월(fire wall)에 흥미가 없으면, 이하와 같이 하면 좋을 것입니다:

        /sbin/ipfw -f flush
        /sbin/ipfw add divert natd all from any to any via ed0
        /sbin/ipfw add pass all from any to any

    2 번째의 행은 당신의 인터페이스에 의 ( ‘ed0’ (을)를 적절히 변경해 주세요).

    이 파이어 월(fire wall)의 설정에서는, 로컬 네트워크상의 누구나가 소스 주소를 당신의 호스트에 위장 가능한 것을 인식해 주세요. 로컬 네트워크상에 그 밖에 호스트가 있는 경우, 신뢰하는 호스트에/로부터의 트래픽만을 허가한다 파이어 월(fire wall) 룰을 작성하는 것을 강하게 권합니다.

    진짜의 파이어 월(fire wall) 룰을 지정하는 경우, 스크립트의 선두에서 상기의 2 행 째를 지정하면 좋을 것입니다. 그렇게 하는 것에 의해, 파이어 월(fire wall)에 의해 배제되어 버리기 전에, natd 하지만 모든 패킷을 볼 수가 있게 됩니다.

    natd 의 변환 후, 전환을 일으키게 한 룰 번호의 다음의 룰 번호로부터, 패킷은 파이어 월(fire wall)에 재입 합니다 (같은 번호에 복수의 룰이 있는 경우에는, 다음의 룰로부터에는 되지 않습니다).

2.  /etc/rc.conf 그리고

        firewall_enable=YES

    (와)과 설정해, 파이어 월(fire wall)를 작동시킵니다. 이것은 시스템의 기동시의 스크립트에 /etc/rc.firewall 스크립트를 실행하도록(듯이) 전합니다. 금방 재기동하고 싶지 않은 경우에는, 콘솔로부터 손으로 실행해 주세요. 백그라운드에서 실행시키므로 없는 한, 이것은 결코 가상 세션으로부터 가서는 안됩니다. 만약 실행시켜 버리면(자), flush 를 한 후에 당신은 배척되어 버려, 모든 액세스를 영구히 차단하기 위해서 이 지점에서 /etc/rc.firewall 의 실행은 멈추어 버립니다. 스크립트를 백그라운드에서 실행하면, 이 재해를 피할 수가 있습니다.

관련 항목
divert(4), protocols(5), rc.conf(5), services(5), syslog.conf(5), ipfw(8), ppp(8)

저자
이 프로그램은, 많은 사람들의 가늘게 썬 것의 노력의 결과입니다:

Archie Cobbs <archie@FreeBSD.org> (divert 소켓) Charles Mott <cmott@scientech.com> (패킷 앨리어스(alias)) Eivind Eklund <perhaps@yes.no> (IRC 서포트와 그 외의 추가) Ari Suutari <suutari@iki.fi> (natd) Dru Nelson <dnelson@redwoodsoft.com> (초기의 PPTP 서포트) Brian Somers <brian@awfulhak.org> (통계역 ) Ruslan Ermilov <ru@FreeBSD.org> (natd 와 패킷 앨리어싱(aliasing)와 풀)