Hi,

Here's the summary of the previous IRC meeting.

---

COMMUNITY MEETING

Place: #openvpn-devel on irc.freenode.net
List-Post: openvpn-devel@lists.sourceforge.net
Date: Monday 2nd Feb 2015
Time: 20:00 CET (19:00 UTC)

Planned meeting topics for this meeting were on this page:

<https://community.openvpn.net/openvpn/wiki/Topics-2015-02-02>

Next meeting has not been scheduled but will be on the same weekday and
time. Your local meeting time is easy to check from services such as

<http://www.timeanddate.com/worldclock>

SUMMARY

cron2, d12fk, lev, jamesyonan, mattock and segoon participated in this
meeting.

---

Discussed the "​Mac OS X Keychain management client" (v3) patch:

<http://thread.gmane.org/gmane.network.openvpn.devel/9421>

The patch was given an ACK by jamesyonan on the condition that the
changes affecting existing codebase are tested on Android. We will ask
if plaisthos could help with the testing.

---

Discussed the "​Make OpenVPN set routes on Windows Vista and later" patch:

<http://sourceforge.net/p/openvpn-gui/openvpn/ci/8195efc0d8841b52217643a43d486cda2e171fea>

Jamesyonan agreed the general approach used in interactive.c is the best
one. Although some potential improvements were identified, the patch was
given an ACK by cron2 in order to get it into the wild in form of Git
"master" Windows snapshots. Incremental improvements will be made based
on user feedback and practical tests.

---

Discussed the "Account for peer-id in frame size calculation" patch:

<http://thread.gmane.org/gmane.network.openvpn.devel/9418>

Decided to delay the link-mtu calculation until after options have
received. This fixes the issue at hand and  should not bring up new
surprises. More discussion is needed to figure out the best long-term
plan regarding protocol negotiations in general.

---

Full chatlog is attached.

-- 
Samuli Seppänen
Community Manager
OpenVPN Technologies, Inc

irc freenode net: mattock

(19.47.01) d12fk: mattock: yes I can stick around
(20.19.45) segoon [~va...@ppp83-237-17-156.pppoe.mtu-net.ru] è entrato nella 
stanza.
(20.19.57) segoon: hi
(20.58.11) mattock: hi guys
(20.58.25) mattock: and james is here also
(20.58.31) cron2: ho!
(21.00.38) mattock: topic list: 
https://community.openvpn.net/openvpn/wiki/Topics-2015-02-02
(21.00.39) vpnHelper: Title: Topics-2015-02-02 – OpenVPN Community (at 
community.openvpn.net)
(21.00.58) mattock: is the topic order ok for everyone?
(21.01.05) mattock: anything to add to the agenda?
(21.01.20) cron2: wfm
(21.02.35) mattock: in english? :P
(21.02.41) cron2: works for me
(21.02.48) mattock: ah :)
(21.03.00) mattock: so first topic: "​Mac OS X Keychain management client (v3)"
(21.03.16) mattock: does this one get an ACK from somebody?
(21.03.32) mattock: http://thread.gmane.org/gmane.network.openvpn.devel/9421
(21.03.35) vpnHelper: Title: Gmane Loom (at thread.gmane.org)
(21.04.53) d12fk: hi
(21.05.13) segoon: nope, and i'm afraid it got no comments
(21.05.32) segoon: I hope it is kind of "no objections" :)
(21.05.35) mattock: hi d12fk!
(21.05.40) mattock: yeah, I hope so too
(21.05.56) cron2: segoon: unfortunately, more "nobody reviewed it yet"
(21.07.49) mattock: jamesyonan: any thoughts on the v3 of the MacOS X keychain 
patch?
(21.08.13) jamesyonan: it's going to take me a while to digest this all
(21.09.02) jamesyonan: but overall I think the NEED-CERTIFICATE approach is a 
big improvement
(21.10.04) d12fk: i can stay until until 2100h, need to get sleep. superbowl 
took 4 hour of my night 
(21.10.19) mattock: d12fk: 50 minutes?
(21.10.28) cron2: segoon: it's more intrusive than I expected, so I can't say 
"good" or "no good" on this easily.  The direction looks good.
(21.10.35) d12fk: mattock: roughly
(21.10.37) mattock: ok
(21.11.17) segoon: cron2: I tried to group all similar stuff from existing code 
and my code to limit code duplication
(21.11.35) segoon: all changes to existing code should be rather simple
(21.12.14) cron2: segoon: yes, but it's code paths that I'm absolutely not 
familiar with, so I do not feel comfortable judging this off-hand
(21.12.24) cron2: (the networking paths, I would :) )
(21.16.20) jamesyonan: what is the rationale for 
buffer_list_aggregate_separator?
(21.18.48) segoon: it shrinks a list to a string adding "\n" between list items
(21.18.57) segoon: like "\n".join(list)
(21.19.05) segoon: (I use it this way)
(21.19.27) jamesyonan: why did we not need it before but we need it now?
(21.21.04) segoon: I joined char** manually which is error-prone
(21.21.33) segoon: I was told to use buffer API for such kind of actions
(21.21.46) jamesyonan: right
(21.24.30) jamesyonan: so it looks like you wrote a more general 
management_query_multiline_flatten and then refactored some existing functions 
like management_query_rsa_sig to use it
(21.24.45) segoon: right
(21.25.32) jamesyonan: how much testing did you do on this and 
buffer_list_aggregate refactor to ensure that there's no breakage of existing 
code that uses these methods?
(21.27.38) segoon: well, I started openvpn with and without keychain, pushed 
data via tunnel
(21.28.37) jamesyonan: did anyone test this with Android to ensure that there's 
no breakage caused by the refactoring?
(21.28.38) segoon: I haven't tested buffer_list_aggregate specifially
(21.29.26) mattock: plaisthos: ^^^
(21.32.45) mattock: jamesyonan: so android in particular could have issues?
(21.32.57) cron2: mattock: plaisthos said he has no time today
(21.33.05) mattock: ok
(21.33.24) jamesyonan: well android uses the external PKI methods, so it uses 
some of the same code that was refactored
(21.33.33) jamesyonan: I think it would make sense to test that
(21.33.34) mattock: so it would be good test
(21.33.49) mattock: we could ask plaisthos to do some testing
(21.33.57) mattock: what in particular would need to be tested?
(21.35.13) jamesyonan: overall the patch looks good -- the issues I had last 
time have been largely resolved, but I think the refactors justify more 
testing, especially of code that exercises the refactored functions
(21.35.39) mattock: excellent!
(21.36.07) mattock: so provided nothing breaks it's an ACK?
(21.36.25) jamesyonan: yes
(21.36.44) mattock: so some work for plaisthos and we're done :)
(21.37.03) segoon: great!
(21.37.06) jamesyonan: who else has acked this so far?
(21.37.13) mattock: nobody
(21.37.17) mattock: as a whole, at least
(21.37.43) cron2: we gave segoon guidance how we want this to look like (so, 
feature-wise I think we agree on this), but nothing code-wise yet
(21.41.53) mattock: shall we move on?
(21.42.05) mattock: d12fk needs to split soon
(21.44.24) cron2: d12fk: did you find time to revamp the openvpn side to use 
tuntap_options?
(21.44.45) d12fk: nope not yet
(21.45.12) d12fk: i have to notes from two week stored safly on disk =)
(21.48.42) mattock: where did stop two weeks ago?
(21.48.59) d12fk: right before the windows service
(21.49.00) mattock: didn't we get the windows-specific bits partially reviewd?
(21.49.01) mattock: ok
(21.49.29) cron2: I think we agreed (three weeks ago?) on using tuntap_options 
for the pipe id, and I think james and d12fk did some discussion on the service 
architecture two weeks ago
(21.50.11) cron2: but i have no idea what the next steps should be - I'm fine 
merging the amended openvpn code, because that's pretty self-contained (so, 
future-ACK here :) )
(21.50.58) d12fk: yeah the service could use some review as well
(21.51.22) cron2: do we all agree on the general architecture?  Jamesyonan?
(21.51.36) mattock: a very brief summary of the previous meeting here: 
https://sourceforge.net/p/openvpn/mailman/message/33244201/
(21.51.37) vpnHelper: Title: OpenVPN / Mailing Lists (at sourceforge.net)
(21.51.41) mattock: nothing technical, though
(21.51.57) mattock: (gmane seems to be dropping quite a lot of messages, like 
that one)
(21.57.07) jamesyonan: I think this is the right approach for Windows, i.e. 
using a Windows pipe and have the server "impersonate" the credentials of the 
client
(22.00.46) mattock: what about the windows service code itself?
(22.00.52) mattock: any comments?
(22.01.26) d12fk: i personally don't like how the parametrs are passed from the 
gui to the service
(22.03.41) cron2: if I remember right, it's 0-separated strings passed along a 
pipe?
(22.03.47) d12fk: yes
(22.04.33) cron2: can a windows filename include 0-bytes (due to character 
encoding)?
(22.04.37) d12fk: the the command line params are just the string. I would 
rather have a tlv list so that only predefined options are allowed to be 
passed. easier to lock down
(22.05.35) cron2: so that would just be "--config $there"?  What other 
arguments are passed (maybe --setenv IV_GUI_VER ...)?
(22.05.51) d12fk: cron2: no, it it's wide chars it's still 0x0041 and not 0x0000
(22.06.14) cron2: d12fk: ah, so it's *all* wide chars and you parse it as wide 
only
(22.06.22) d12fk: yes
(22.06.30) cron2: (this is what I hate about UTF8 - variable length surprises)
(22.07.19) cron2: so, what options do you pass?  haven't looked into the gui 
code yet
(22.07.20) d12fk: ... but never 0
(22.07.37) cron2: ok, good :)
(22.07.40) d12fk: all kinds of stuff. mgmt itf things
(22.08.02) d12fk: proxy config
(22.08.32) cron2: oh, so gui fetches windows system proxy settings and uses 
that?
(22.10.10) d12fk: 
http://sourceforge.net/p/openvpn-gui/code/ci/master/tree/openvpn.c#l685
(22.10.12) vpnHelper: Title: OpenVPN GUI / OpenVPN-GUI / [a449f6] /openvpn.c 
(at sourceforge.net)
(22.10.27) cron2: thanks
(22.10.43) d12fk: yes, it passes the mgmt itf option so proxy info is queried 
during rnutime
(22.12.03) d12fk: currently you could also pass --route and defeat the purpose 
of the service
(22.12.21) d12fk: at least all the security wizardry
(22.13.04) cron2: well, you can also put --route into your .ovpn (unless you 
lock that one down, which I understand is an option depending on installation)
(22.13.39) d12fk: in general it is under program files which is read only in 
later windows versions
(22.13.45) cron2: well, you could certainly go TLV here, it's only a handful of 
flags, basically the variables in line 686-692 plus managge-password
(22.14.11) d12fk: yes that would make it more robust
(22.15.40) cron2: I'm not sure I grok the code, though
(22.15.46) cron2: you build "cmdline" (line 686)
(22.16.14) cron2: *if* service pipe succeeds, you build startup_info, which 
only has manage info + config dir in it
(22.16.31) cron2: and only startup_info is sent to the pipe
(22.16.35) cron2: or am I misreading that?
(22.16.58) cron2: ok, found it - "options" = "cmdline +8"
(22.18.16) cron2: so, going for TLV would be more robust against local 
attackers trying to mess up routing via help of openvpn + openvpn service but 
not having a server to help them with that
(22.18.36) cron2: (but having a valid .ovpn in place, because if openvpn can't 
connect it won't set up routes either)
(22.19.10) cron2: I'd call that pretty obscure :-) - but robust is good, if we 
can get this actually done...  So how's your available time?
(22.19.31) d12fk: not so good currently
(22.20.07) cron2: so maybe we should go for "merge what we have + amendments, 
and the incrementally make it better, while people can start testing and 
breaking it with git-master-on-windows snapshots"?
(22.20.44) mattock: sounds good to me
(22.20.59) mattock: as long the code is in snapshots and git master only, 
there's not that much of a risk
(22.23.26) mattock: also, the "no need for admin privs on Windows" is probably 
good enough motivator for people to actually use the snapshots
(22.23.35) mattock: usually they would not bother
(22.25.44) cron2: d12fk: does that work for you?
(22.31.16) mattock: did sleep deprivation due to superbowl take him down?
(22.32.32) cron2: seems so :-) - let's tell him good night and continue another 
week  (I would guess "kid woke up, dad has to go and cuddle" :) )
(22.32.39) mattock: yep
(22.33.04) mattock: did everyone else drop off already?
(22.33.18) lev__: how abt the mtu thing
(22.33.20) cron2: jamesyonan: you still around?  The next one is really for you 
:)
(22.33.23) mattock: ah hi lev!
(22.33.33) cron2: lev__: exactly this
(22.33.58) jamesyonan: yes
(22.34.19) cron2: ok, let me summarize the issue quickly
(22.34.33) cron2: peer-id -> TPACKET_V2 increases packet overhead by 3 bytes
(22.34.42) cron2: (we all knew this)
(22.35.36) cron2: we overlooked to change the MTU / overhead calculation inside 
OpenVPN to take this into account, aka "make the buffers big enough".  Syzzer 
discovered that uncompressed/non-compressible full-1500 byte packets would get 
dropped, sent a patch, I merged it.  Patch here:
(22.35.40) cron2: http://thread.gmane.org/gmane.network.openvpn.devel/9418
(22.35.42) vpnHelper: Title: Gmane Loom (at thread.gmane.org)
(22.36.05) cron2: this is all logical and straight forward, but now something 
came up that we need to decide on a strategy
(22.36.52) cron2: we have --tun-mtu and --link-mtu inside OpenVPN.  --link-mtu 
can be set via command line, or, if not, is calculated as "--tun-mtu + 
(option-dependent) overhead" (like, compression adds +1 for the compression 
opcode)
(22.37.28) cron2: with syzzers patch, calculated --link-mtu goes up by +3 (to 
be expected), but now when talking to a server with --opt-verify, OCC check 
blows up
(22.37.44) d12fk: nope it's mother in law with windows problem =)
(22.37.50) d12fk: but yeah i'm ok
(22.38.42) jamesyonan: but wouldn't server need to do the same adjustment on 
its side so the link-mtu would be consistent?
(22.38.43) cron2: because one side sends --link-mtu 1542 and the other side has 
--link-mtu 1545
(22.39.06) cron2: yeah... *if* you talk "peer-id capable server to peer-id 
capable client"
(22.39.21) cron2: but if you have an old client -> new server, or new client -> 
old server --> boom
(22.39.54) cron2: when testing old<->new compatibility, we didn't have the mtu 
adjustment patch, so this didn't show up
(22.40.12) cron2: lev__: what did you do to your server?  It's not mismatching 
anymore
(22.40.18) jamesyonan: I see what you're saying -- opt-verify is acting too 
soon, it needs to wait until after options push before the parameters that 
affect MTU are finalized
(22.40.46) lev__: cron2: let me check
(22.41.22) cron2: jamesyonan: this is one way to phrase it - right now, we have 
always increased the MTU by +3, not depending on peer-id
(22.41.57) cron2: so that would be one option to tackle it - when going to 
--opt-verify, use the TPACKET_V1 calculation, and adjust link-mtu +=3 if we 
receive a pushed option peer-id
(22.42.47) jamesyonan: actually in ovpn3 I had to disable opt-verify because 
ovpn3 does a lot more intensive negotiation (such as negotiatiing crypto mode) 
and some of these negotiations alter the MTU parameters
(22.43.26) jamesyonan: I think to fix these issues, opt-verify needs to be 
delayed
(22.43.32) lev__: cron2: I have an old version now without mtu patch
(22.43.55) cron2: that would work for *this* corner case (someone needs to code 
it and I have the suspicion that it's me), but what if a server pushes 
--link-mtu... oh, wait, that would actually work if we calculate this based on 
peer-id option set-or-not (so a new server would know what to expect, and an 
old server wouldn't see a difference)
(22.45.47) jamesyonan: but opt-verify happens early, before the server has 
decided which options to push
(22.45.50) cron2: jamesyonan: I don't think we can easily do this, that is, 
delay OCC until after push/push-reply.  There is a trac bug about some OpenVPN 
service providers that parse the opt-verify options to *build* the push-reply 
options in a way that they do option negotion...
(22.46.18) cron2: that's it, today some servers depend on the order of things - 
so turning it around might cause larger incompatibilities
(22.47.26) jamesyonan: what if we have the server treat the OCC string the same 
way it treats the IV_ parameters, i.e. as a declaration of client capabilities
(22.48.07) jamesyonan: not something that needs to strictly match between peers
(22.49.16) lev__: would it make sense to send V2 packets only if they fit in 
MTU and V1 otherwise?
(22.49.56) jamesyonan: but a lot of packets wouldn't fit in MTU if even one 
byte was added
(22.50.32) cron2: jamesyonan: using it for negotiation seems to be what these 
people do, but it would break existing installations
(22.51.39) cron2: as for sending TPACKET_V2 - there's always ACKs and such 
which are small, so that could be done, but it would make it harder to decide 
"no more v1 packet support" one day
(22.52.43) jamesyonan: well I think that going forward, opt-verify and OCC need 
to evolve to deal with a higher level of negotiation.  The question is how to 
structure a graceful upgrade path for this.
(22.53.04) cron2: yeah, that's basically the options I see - "revert syzzer's 
+3 patch, stick to the old link-mtu and if the packet does not fit, set V1", 
and "use the old-calculation link-mtu for OCC, and adjust to +3 later if 
peer-id is pushed"
(22.53.15) cron2: (and rework the whole thing long time :))
(22.53.29) cron2: I'm mostly worried about short time compatibility right now, 
without breaking long-term evolution
(22.57.30) jamesyonan: what if we deprecate OCC but provide compatibility by 
generating it based on default options, i.e. don't modify the OCC string based 
on MTU changes caused by negotiation such as proto V2?
(22.58.42) cron2: yes, this is what I had in mind - calculate "occ-transmitted" 
link-mtu based on default options, adjust later, use that for actual packet 
handling
(22.59.03) jamesyonan: right
(22.59.11) cron2: how do you do OCC in OpenVPN 3?  "just do not send it at all"?
(22.59.53) jamesyonan: I do send it, but I generate it using default options, 
before any negotiation occurs.
(23.00.35) cron2: good, that sounds like a workable way forward.  I'll do a 
patch for 2.x and test with lev__.
(23.01.31) cron2: one more question on this:  if a .ovpn config has a 
--link-mtu setting in it, and both client and server get upgraded to peer-id 
capable versions, still using the same .ovpn, all of a sudden that would reduce 
the effective tun-mtu by -3 (hard upper bound, 3 bytes extra overhead)
(23.02.21) cron2: question 1: how common is explicitely setting --link-mtu?  
q2: how should we deal with it?  Just silently bump up --link-mtu, or put a 
warning ("peer-id has been pushed, you have a static --link-mtu in your config, 
except mtu issues! we told you so!")
(23.03.12) jamesyonan: can we not incur the 3 byte overhead of proto V2 if both 
client and server don't use it?
(23.03.58) cron2: the current implementation is "if the client can do it, 
always push peer-id <x> and turn it on", so there is no "optional" here
(23.04.45) lev__: so clients starting from 2.3.6 always push IV_PROTO 2
(23.05.06) jamesyonan: I sort of handle the 3-byte bloat issue with ovpn3 by 
only supporting proto V2 in conjunction with a bundle of other protocol 
enhancements that actually reduce the protocol overhead in aggregate
(23.05.51) cron2: how does that work?
(23.06.26) jamesyonan: ovpn3 basically supports proto v1 or v2 by negotiation
(23.07.18) jamesyonan: proto v2 in ovpn3 adds 4 byte opcode, AES-GCM, and 
compression V2
(23.08.21) jamesyonan: but AEAD mode (i.e. AES-GCM) saves so much overhead, 
that even adding the 3 byte overhead still results in a net reduction
(23.09.06) cron2: ah, so even if you get pushed "peer-id <x>", it won't enable 
v2 packets unless you also have AEAD mode
(23.10.04) jamesyonan: sort of -- the server won't push peer-id <x> unless the 
client supports all of the V2 protocol enhancements
(23.10.08) cron2: we can't do that for 2.3.x (won't receive AEAD too 
intrusive), but we could for 2.4... 
(23.10.40) cron2: now that would need more work on the 2.x server side, which 
is very simple right now (IV_PROTO=2 -> push peer-id)
(23.11.10) cron2: and actually poses strategic questions for "how much of 
peer-id do we want (and can we get) into 2.3"
(23.11.29) segoon ha abbandonato la stanza (quit: Quit: WeeChat 0.3.7).
(23.12.45) cron2: (and it implies that having an iOS v3 client talk to a 
2.4-to-be server it would find itself in the same situation - maybe no AEAD, 
but peer-id being pushed)
(23.13.17) jamesyonan: I know we discussed this in Munich, but I've come around 
to the opinion that it's better to have an all-or-nothing approach with respect 
to protocol extensions
(23.14.21) jamesyonan: rather than independently negotiate each extension
(23.15.29) cron2: I can see that argument.  My counterargument is that I want 
to see a minimal peer-id implementation (client-side only) in 2.3.x, as that 
will be around for a very long time and should really have it - but we won't 
the bigger things like AEAD or crypto negotiation in there, as that's too 
intrusive
(23.16.02) cron2: the client-side peer-id stuff is just a few lines of code 
(send IV_PROTO=2, understand peer-id option,  accept and generate TPACKET_v2 
packets)
(23.17.20) jamesyonan: agreed that AEAD or crypto negotiation shouldn't be in 
2.3
(23.18.18) lev__: looks like a "small" mtu issue has grown a quite big
(23.18.22) mattock: :)
(23.18.29) mattock: in fact so big that I have to hit the sack
(23.19.28) cron2: hehe, yes.  I have some bits to code, and some thinking to 
do, on 2.3, 2.4, v3, interoperability, and negotiation - and we'll need to work 
on all the trains it seems (and come to a common understanding here)
(23.19.50) mattock: so no resolution today?
(23.19.57) cron2: jamesyonan: thanks, this helped, but we need to do a few more 
rounds on this :-)
(23.20.15) mattock: I'll make a note of this in the summary
(23.20.30) cron2: mattock: resolution is: for now, delay the link-mtu 
calculcation until after options have received (fixes the issue at hand, should 
not bring up new surprises)
(23.20.34) mattock: a quick one: shall we remove escape dashes from the 
man-page?
(23.20.52) ***cron2 has no opinion on this, didn't understand the issue in the 
first place
(23.21.57) mattock: the issue was that searching the man-page failed in the 
past on some operating systems if, say, --win-sys was _not_ escaped like 
\-\-win\-sys
(23.22.12) mattock: searching for that particular string failed, that is
(23.22.39) mattock: I tried to reproduce the issue on Debian 7, CentOS 6 and 
Ubuntu 14.04 and the dashes had no effect whatsoever
(23.23.18) mattock: according to anecdotal evidence the dashes were required at 
some point, and were added by other projects, too, but then something (groff?) 
was fixed and the dashes became unnecessary
(23.23.35) mattock: and now we have partially escaped man-page
(23.23.46) mattock: inconsistently
(23.25.09) mattock: current man-page works just fine afaict, but it looks a bit 
silly
(23.25.26) mattock: anyways, I really need to split, and this is not a 
deal-breaker :)

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to