Ito ang command nat-traverse na maaaring patakbuhin sa OnWorks na libreng hosting provider gamit ang isa sa aming maramihang libreng online na workstation gaya ng Ubuntu Online, Fedora Online, Windows online emulator o MAC OS online emulator
PROGRAMA:
NAME
nat-traverse - Paggamit ng UDP upang tumawid sa mga gateway ng NAT
SINOPSIS
Para gumawa ng simpleng text-only tunnel, gamitin ang mga command
user@left $ nat-traverse 40000:natgw-of-right:40001
user@right $ nat-traverse 40001:natgw-of-left:40000
kung saan ang 40000 ay isang hindi nagamit na port ng UDP sa "kaliwa" at ang 40001 ay isang hindi nagamit na port sa "kanan". Tingnan mo
"HALIMBAWA" para sa higit pa.
VERSION
Inilalarawan ng dokumentong ito ang nat-traverse v0.5.
DESCRIPTION
Ang nat-traverse ay nagtatatag ng mga koneksyon sa pagitan ng mga node na nasa likod ng mga gateway ng NAT, ibig sabihin
mga host na ginagawa hindi may mga pampublikong IP address. Bilang karagdagan, maaari kang mag-setup ng isang maliit na VPN sa pamamagitan ng
gamit ang pppd sa ibabaw ng nat-traverse (tingnan ang "HALIMBAWA"). ginagawa ng nat-traverse hindi kailangan ng
panlabas na server sa Internet, at hindi kinakailangan na muling i-configure ang kasangkot na NAT
gateway, alinman. nat-traverse gumagana sa labas ng kahon.
Tingnan ang "TECHNIQUE" para sa kung paano ito nakakamit.
Limitasyon: hindi gumagana ang nat-traverse sa mga gateway na nagbabago sa mga numero ng port. Ito
ay isang pangunahing problema ng disenyo ng nat-traverse, dahil ang mga binagong numero ng port ay (sa
pangkalahatan) hindi mahuhulaan.
Opsyon
"local_port:peer:remote_port" (kailangan)
Itinatakda ang lokal na port na gagamitin at ang remote na address na kumonekta.
Tandaan na kailangan mong ibigay ang IP address o hostname ng Nat gateway ng host
gusto mong kumonekta, dahil ang target na host ay walang pampublikong IP address.
"--cmd="pppd...""
Pinapatakbo ang tinukoy na utos pagkatapos itatag ang koneksyon.
Ang command ay tatakbo kasama ang STDIN at STDOUT nito na nakatali sa socket, ibig sabihin
lahat ng isusulat ng command sa STDOUT ay ipapasa sa peer.
Kung walang tinukoy na command, ang nat-traverse ay magre-relay ng input mula sa STDIN sa peer at
vice versa, ie nat-traverse degrades sa netcat.
"--window=10 "
Itinatakda ang bilang ng mga paunang packet ng basura na ipapadala. Ang default, 10, ay dapat gumana sa
karamihan sa mga firewall.
"--timeout=10 "
Itinatakda ang maximum na bilang ng mga segundo upang maghintay para sa isang pagkilala ng kapantay.
"--quit-after-connect"
Tumigil sa nat-traverse pagkatapos matagumpay na maitatag ang tunnel.
Ang nat-traverse ay nagbabalik ng hindi-0 na statuscode upang isaad na hindi ito nakapagtatag
ang lagusan.
Ang "--quit-after-connect" ay kapaki-pakinabang kung gusto mong gamitin ng isa pang program ang tunnel. Para sa
halimbawa, maaari mong i-configure ang OpenVPN upang gamitin ang parehong mga port tulad ng nat-traverse -- kaya
Magagawa ng OpenVPN na tumawid sa mga gateway ng NAT.
"--bersyon", "--tulong"
TEKNIQUE
Ang nat-traverse ay nagtatatag ng mga koneksyon sa pagitan ng mga host sa likod ng mga gateway ng NAT nang hindi nangangailangan
muling pagsasaayos ng mga kasangkot na gateway ng NAT.
1. Una, ang nat-traverse sa host "kaliwa" ay nagpapadala ng mga basurang UDP packet sa NAT gateway ng
"tama". Ang mga packet na ito, siyempre, ay itinapon ng firewall.
2. Pagkatapos, ang nat-traverse ng "kanan" ay nagpapadala ng mga packet ng UDP ng basura sa gateway ng NAT ng "kaliwa".
Ang mga packet na ito ay hindi itinapon, dahil iniisip ng NAT gateway ng "kaliwa" ang mga packet na ito
mga tugon sa mga packet na ipinadala sa hakbang 1!
3. Ang nat-traverse ng "kaliwa" ay patuloy na nagpapadala ng mga pakete ng basura sa gateway ng "kanan" ng NAT.
Ang mga packet na ito ay hindi na rin nahuhulog, dahil sa tingin ng NAT gateway ay ang mga packet
mga tugon sa mga packet na ipinadala sa hakbang 2.
4. Sa wakas, ang parehong mga host ay nagpadala ng isang packet ng pagkilala upang ipahiwatig ang pagiging handa. Kapag ang mga ito
natanggap ang mga packet, naitatag ang koneksyon at maaaring mag-relay ang nat-traverse
STDIN/STDOUT sa socket o magsagawa ng program.
HALIMBAWA
Setup of a maliit VPN sa PPP
Madaling mag-setup ng VPN (Virtual Private Network) sa pamamagitan ng paggamit ng Point-to-Point Protocol
Daemon, "pppd":
ugat@kaliwa # nat-traverse \
--cmd="pppd updetach noauth passive notty \
ipparam vpn 10.0.0.1:10.0.0.2"
40000:natgw-ng-kanan:40001
ugat@kanan # nat-traverse \
--cmd="pppd nodetach notty noauth"
40001:natgw-ng-kaliwa:40000
Lumilikha ang "pppd" ng bagong interface, karaniwang "ppp0". Gamit ang interface na ito, maaari kang mag-ping
10.0.0.1 o 10.0.0.2. Gaya ng nakikita mo, ina-upgrade ng "pppd" ang data-only na tunnel nat-traverse
nagbibigay sa isang buong IP tunnel. Kaya maaari kang magtatag ng maaasahang mga koneksyon sa TCP sa ibabaw ng
tunnel, kahit na ang tunnel ay gumagamit ng UDP! Higit pa rito, maaari ka ring magdagdag ng mga IPv6 address
sa "ppp0" sa pamamagitan ng pagpapatakbo ng "ip -6 addr add..."!
Tandaan kahit na kahit na ang VPN na ito is arguably isang pribadong network, ito ay hindi secured sa anumang
paraan. Baka gusto mong gumamit ng SSH para i-encrypt ang koneksyon.
Port pagpapasa sa netcat
Maaari mong gamitin ang "netcat" para ipasa ang isa sa iyong lokal na UDP o TCP port sa isang arbitrary na UDP o
TCP port ng remote host, katulad ng "ssh -L" o "ssh -R":
user@left $ nat-traverse 10001:natgw-of-right:10002 \
--cmd="nc -vl 20000"
user@right $ nat-traverse 10002:natgw-of-left:10001 \
--cmd="nc -v localhost 22"
Sa sandaling maitatag ang tunnel (gamit ang mga UDP port 10001 at 10002), ang TCP port ng "kaliwa"
Ang 20000 ay ipinapasa sa SSH Daemon ng "kanan" (TCP port 22):
user@some-other-host $ ssh -p 20000 user@left
# Makakakonekta sa SSH daemon ng kanan!
Ngunit tandaan na nawala mo ang pagiging maaasahan ng TCP sa halimbawang ito, tulad ng aktwal na data
dinadala sa pamamagitan ng UDP; kaya ito ay isang halimbawa lamang ng laruan. Kung gusto mo ng mga maaasahang stream, gumamit ng PPP
sa ibabaw ng nat-traverse, gaya ng inilarawan sa itaas.
Setup of a VPN sa OpenVPN
Pwede mong gamitin over nat-traverse kung gusto mong magkaroon ng hindi makatatakas vpn.
Ang paggamit ng OpenVPN sa nat-traverse ay nangangailangan lamang ng isang pagbabago sa configuration file ng OpenVPN,
sa pag-aakalang ayaw mong gamitin ang multi-client mode ng OpenVPN: Kailangan mong ayusin ang
"code" at "lport" na mga opsyon nang naaayon, halimbawa:
# Mga opsyon upang idagdag sa kaliwa at kanan na OpenVPN config:
port 60001
lport 60001
# Utos na isagawa sa kaliwang resp. tama:
ugat@kaliwa # hanggang \
nat-traverse --quit-after-connect 60001:right:60001 \
gawin \
matulog 5 \
tapos na; \
openvpn [...]
ugat@kanan # hanggang \
nat-traverse --quit-after-connect 60001:left:60001 \
gawin \
matulog 5 \
tapos na; \
openvpn [...]
Tinitiyak ng "hanggang" loop na ang OpenVPN ay hindi magsisimula bago magawa ng nat-traverse
itatag ang koneksyon. Nag-ulat din si Michael Kugele ("michael (at) kugele.net") ng isang paraan
para magamit pa rin ang multi-client mode ng OpenVPN na may nat-traverse: Tulad ng lahat ng pagkakataon ng
Ang nat-traverse ay kailangang gumamit ng mga natatanging port (dahil ang isang koneksyon ay kinilala ng
source/destination port combination), kailangan mong gumamit ng mga panuntunan sa pag-redirect para i-redirect ang
mga port na ginagamit ng nat-traverse sa port na pinakikinggan ng daemon ng OpenVPN sa:
iptables -t nat -A PREROUTING -p udp \
--dport $LPORT -j DNAT --sa $HOST:$PORT
iptables -t nat -A PREROUTING -p udp \
--dport $PORT -j REDIRECT --to-port $LPORT
Tinutukoy ng $LPORT ang source port na ginagamit ng nat-traverse sa gilid ng server, at "$HOST:$PORT"
ay ang address ng OpenVPN server.)
LIMITASYON
IPv4 lang ang sinusuportahan, hindi gagana ang nat-traverse sa mga IPv6 address. Mag-drop sa akin ng isang tala kung ikaw
kailangan ng IPv6 support.
Ang nat-traverse ay hindi gumagana sa mga gateway na nagbabago sa mga numero ng port. Ito ay
pangunahing problema ng disenyo ng nat-traverse, dahil ang mga binagong numero ng port ay (sa pangkalahatan)
hindi predictable.
Gumamit ng nat-traverse online gamit ang mga serbisyo ng onworks.net