Есть сетка - inet<->(server)<->(comp) требуется написать нечто вроде виндового ICS для сервера те перекидывать пакеты с одной сетевухи на другую, как это сделать под win2k, может использовать сырые сокеты? может у кого есть примерчик или дока?
...может перевести сетевуху в неразборчивый режим ловить все пакеты и перенаправлять на адреса указанные в заголовках? вобщем нужен простой NAT.
толку то, там базовые понятия типа как оно работает в абстрактном иочень упрощённом виде, а мне надо знать как пакеты идут до ната и как он узнает куда их дальше отправить, по идее в заголовке должен быть адрес шлюза и внешний адрес или ип заголовки инкапсулируются в какой нибудь ещё протокол пока идут до шлюза?
Folk Acid Мне нужен NAT. ...вот когда пакетик доходит с компа (внутр. сетки) до NAT сервера его обратный адрес меняется же по идее на адрес NAT сервера в подсети с внешним шлюзом, тогда каким образом узнать какому из компов локалки пришёл ответ там же будет адрес назначения для внешней подсети?
Если TCP\UDP достаточно, то: > пакетик доходит с компа (внутр. сетки) до NAT сервера 1) запомнил IP\MAC и пару портов того, от кого пришел пакетик > его обратный адрес меняется же по идее на адрес NAT сервера в подсети с внешним шлюзом 2) подменяются MAC'и, ip и порт отправителя (выделил уникальный в разрезе портов NAT и типа протокола транспортного уровня) > тогда каким образом узнать какому из компов локалки пришёл ответ там же будет адрес назначения для внешней подсети? 3) пришел ответ от сервера во внешней сети - смотришь на своем типа-NAT'е на порт получателя. Если он совпадает с тем, что ты присвоил в п.2 - достаешь данные компа из п.1, меняешь адреса\порты и отправляшь во внешнюю сеть вот примерно так. И не забываем контрольные суммы пересчитывать.
А как узнать внутренний IP при использовании NAT? Например в асе часто можно увидеть "Внутренний IP", а эта инфа содержится в таблицах NAT сервера. Ну и прочее, вроде порта, на котором висит тот или иной пользователь, можно ли и, если да, как узнать?
gh05t, эээ, внутренний IP адрес не видет снаружи. Его можно узнать либо на router-e, или если в протоколе есть что-то что сообщает адрес серверу.
s0larian Ясно. А в протоколе ICQ такая фича есть, не знаешь? То есть без DNAT прямое соединение от узла одной подсети до узла другой подсети не установить?
gh05t Видимо только TURN, предача данных через внешний сервер. В Skype точно есть передача внутреннего ip.
gh05t, эээ, что-то ты мутно спрашиваешь. TCP соединение можно установить с любым IP адресом к которому есть route (ессно если на порте кто-то слушает). С точки зрения компа сидящего на 192.168.1.0/24 можно послать TCP SYN кому-то типа my-domain.provider.com:1234 если там есть DNAT на внутренний адрес. Работает это потому-что есть route через public internet. Если та другая сеть 192.168.20.0/24, то к ней просто нету route-a. Работать будет только если есть VPN соединение (напримет IPSec tunnel mode) Почитай книку про сети и IP.